【发布时间】:2016-12-26 16:13:21
【问题描述】:
我想对我的 SQL 查询中的 DATEDIFF 函数制作一个简短的版本。在我的代码中,我创建了两个临时表,然后在那里选择并使用 DATEDIFF 函数。
我希望简化这段代码,并且只使用一个 SELECT 语句来提供相同的结果。有可能吗?
这是我的 SQL 查询
DECLARE @Temp TABLE (ID int, Stamp datetime)
INSERT INTO @Temp (ID, Stamp) VALUES (1, '2016-08-17')
INSERT INTO @Temp (ID, Stamp) VALUES (1, GETDATE())
INSERT INTO @Temp (ID, Stamp) VALUES (1, GETDATE()+0.5)
INSERT INTO @Temp (ID, Stamp) VALUES (2, '2016-08-16')
INSERT INTO @Temp (ID, Stamp) VALUES (2, GETDATE())
INSERT INTO @Temp (ID, Stamp) VALUES (2, GETDATE()+3)
SELECT ROW_NUMBER() OVER (ORDER BY ID) as c, ID, Stamp INTO #Temp2
FROM @Temp
SELECT ROW_NUMBER() OVER (ORDER BY ID) as d, ID, Stamp INTO #Temp3
FROM @Temp
SELECT temp2.ID, temp2.Stamp, ISNULL(DATEDIFF(day, temp3.Stamp, temp2.Stamp),0) as DateDiff
FROM #Temp2 as temp2
LEFT JOIN #Temp3 as temp3 on temp2.ID = temp3.ID and temp2.c = temp3.d + 1
谢谢!
【问题讨论】:
-
如果您在 2012 年以上,请使用 Lead()/Lag()
标签: sql sql-server select datediff