我有以下问题需要解决。
表格中有TIMEIN
列,我想添加一列TIMEOUT
,这应该取TIMEIN
加上60秒的值,除非下一个TIMEIN
更近。
所以:
ID PROJECTCODE TIMEIN TIMEOUT
----------------------------------
1 25847 35 79 = less as 60 seconds in between 35(id1) and 80(id2)
2 25847 80 140 = more as 60 seconds in between 80(id2) and 158(id3)
3 25847 158 218 = 60 added because there is no bigger time as 158sec.
4 25847 35 79 = less as 60 seconds in between 35(id1) and 80(id2)
重要的是要知道id不跟进,并且同时可能有两次或更多次。我该怎么办?我可以遵循任何好的想法或文件吗?
答案 0 :(得分:3)
您可以使用LEAD()
访问下一行的值,然后使用CASE
语句来确定是否使用60秒。像这样:
SELECT ID,
PROJECTCODE,
TIMEIN,
CASE WHEN LEAD(TIMEIN) OVER (ORDER BY ID) - TIMEIN < 60
THEN LEAD(TIMEIN) OVER (ORDER BY ID) - 1
ELSE TIMEIN + 60
END AS TIMEOUT
FROM TimesTable
可能需要添加PARTITION BY PROJECTCODE
,但从样本数据中不清楚。