0

我有这样一个查询:

SELECT Stamp_date , Stamp_Action FROM FILES_TIME_STAMPS
WHERE Stamp_File_Id = @FileID AND Stamp_Action IN (5,15)

我有这样的查询结果:

2017-12-04 12:56:37.293 5

2017-12-04 15:40:02.593 15

减去两条记录的最佳方法是什么?另外,如果我想轻松地维护它们,如何将它们定义为变量?

4

2 回答 2

1

LAG这是应用函数的好例子:

declare @x table([date] datetime, [value] int)
insert into @x values ('2017-12-04 12:56:37.293', 5), ('2017-12-04 15:40:02.593', 15)

select *,LAG([date], 1) over (order by [date]) [DateLag],
       LAG([value], 1) over (order by [date]) [ValueLag],
       DATEDIFF(minute, [date],LAG([value], 1) over (order by [date])) [DateDifference],
       [value] - LAG([value], 1) over (order by [date]) [ValueDifference]
from @x

我包含了尽可能多的例子,所以你可以决定你需要什么,并且可以看到它是如何工作的:)

于 2017-12-07T09:21:08.070 回答
1

如果您只想减去这两个日期,您可以使用DATEDIFF-MINMAX

SELECT DATEDIFF(MINUTE, MIN(Stamp_date) , MAX(Stamp_date)) FROM FILES_TIME_STAMPS
WHERE Stamp_File_Id = @FileID AND Stamp_Action IN (5,15)

您可以根据需要更改MINUTESECOND或其他datepart

此外,如果您想根据 Stamp_Action 选择 MIN 和 MAX,您可以使用它。

SELECT DATEDIFF(MINUTE, 
    MIN(CASE WHEN Stamp_Action = 5 THEN Stamp_date END)  , 
    MAX(CASE WHEN Stamp_Action = 15 THEN Stamp_date END ) ) 
FROM FILES_TIME_STAMPS
WHERE Stamp_File_Id = @FileID AND Stamp_Action IN (5,15)
于 2017-12-07T09:13:08.993 回答