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
减去两条记录的最佳方法是什么?另外,如果我想轻松维护它们,如何将它们定义为变量?
如果您只想减去这两个日期,您可以使用 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
此外,如果您想要 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
我提供了尽可能多的例子,所以你可以决定你需要什么,然后看看它是如何工作的:)
我有这样的疑问:
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
减去两条记录的最佳方法是什么?另外,如果我想轻松维护它们,如何将它们定义为变量?
如果您只想减去这两个日期,您可以使用 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
此外,如果您想要 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
我提供了尽可能多的例子,所以你可以决定你需要什么,然后看看它是如何工作的:)