我有下表“ UserState”:
_id___|_ctime____________________________|_state__________|_userid
1 | 2014-06-09 05:57:07.033334+00 | Ready | 1
2 | 2014-06-09 05:53:35.243864+00 | Busy | 1
3 | 2014-06-09 05:51:39.412722+00 | Ready | 1
4 | 2014-06-09 05:48:48.09651+00 | logged out | 1
* ctime表示用户获取新状态的时间。该表意味着,我只有状态的开始时间,但不知道结束时间。状态的结束时间是另一状态的开始时间。
我需要一个SQL查询,它将为我提供每个状态的以下数据:
用户名| 州| ctime | 将结束时间视为下一个状态的开始时间(ctime)
无法将新列添加到表“ UserState”。但是有可能(id = 1)的用户在同一状态“就绪”之后可能具有状态“就绪”,因此这些状态必须分组为1行。
窗口函数将执行以下操作:
select userid,
state,
ctime as start_time,
lead(ctime) over (partition by userid order by ctime) as end_time
from userstate;
如果您不习惯使用窗口功能,请参阅Postgres手册:http :
//www.postgresql.org/docs/current/static/tutorial-window.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句