我有这样一个查询:
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
减去两条记录的最佳方法是什么?另外,如果我想轻松地维护它们,如何将它们定义为变量?
我有这样一个查询:
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
减去两条记录的最佳方法是什么?另外,如果我想轻松地维护它们,如何将它们定义为变量?
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
我包含了尽可能多的例子,所以你可以决定你需要什么,并且可以看到它是如何工作的:)
如果您只想减去这两个日期,您可以使用DATEDIFF
-MIN
MAX
SELECT DATEDIFF(MINUTE, MIN(Stamp_date) , MAX(Stamp_date)) FROM FILES_TIME_STAMPS
WHERE Stamp_File_Id = @FileID AND Stamp_Action IN (5,15)
您可以根据需要更改MINUTE
为SECOND
或其他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)