t-sql如何从table中减去两条记录

t-sql how to subtract two records from table

我有这样的疑问:

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

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

如果您只想减去这两个日期,您可以使用 DATEDIFFMIN -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

此外,如果您想要 select MIN 和 MAX 根据 Stamp_Action,您可以使用这个。

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)

这是应用 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

我提供了尽可能多的例子,所以你可以决定你需要什么,然后看看它是如何工作的:)