AZURE T-SQL计算输出到新的VIEW

时间:2017-09-22 14:29:48

标签: sql tsql azure-sql-database

我有以下问题需要解决。

表格中有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不跟进,并且同时可能有两次或更多次。我该怎么办?我可以遵循任何好的想法或文件吗?

1 个答案:

答案 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,但从样本数据中不清楚。