los*_*rse 2 sql postgresql window-functions
我有一些数据(按"TimeStamp"排序),如下所示:
Key | TimeStamp | Column3 | ColumnN
--------------+-------------------------+-------------+--------------
1 | 2012-01-01 08:00:23 | ... | ...
2 | 2012-01-01 08:01:07 | ... | ...
3 | 2012-01-01 08:02:56 | ... | ...
6 | 2012-01-01 08:02:56 | ... | ...
4 | 2012-01-01 08:03:39 | ... | ...
5 | 2012-01-01 08:04:32 | ... | ...
Run Code Online (Sandbox Code Playgroud)
我需要为每条记录选择"TimeStamp" 的下一个值(不仅仅是下一行).
例如,以上数据如下所示:
Key | Begin | End | Column3 | ColumnN
--------------+-------------------------+-------------------------+-------------+--------------
1 | 2012-01-01 08:00:23 | 2012-01-01 08:01:07 | ... | ...
2 | 2012-01-01 08:01:07 | 2012-01-01 08:02:56 | ... | ...
3 | 2012-01-01 08:02:56 | 2012-01-01 08:03:39 | ... | ...
6 | 2012-01-01 08:02:56 | 2012-01-01 08:03:39 | ... | ...
4 | 2012-01-01 08:03:39 | 2012-01-01 08:04:32 | ... | ...
5 | 2012-01-01 08:04:32 | NULL | ... | ...
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用窗口函数,但我无法得到这个结果.有什么想法吗?
甚至比dense_rank更酷,你可以使用lead窗口功能:
SELECT Key, ts, lead(ts) OVER(ORDER BY ts ASC)
FROM tbl;
Run Code Online (Sandbox Code Playgroud)
从Erwin的回答中无耻地窃取了sqlfiddle链接.
编辑:嗯,其实这是行不通的正是像你描述的,因为它不会选择一个较高值,当两个值相等.我不会删除答案,因为我认为它在这种情况下很有用,但我会将其标记为社区维基.
| 归档时间: |
|
| 查看次数: |
1212 次 |
| 最近记录: |