我在Server表中有一个日期列表,需要找出有关它们的几个单独的主题:
第一,日期是每月还是每季?日期总是从一个月的第一天开始。
例如,一个序列可能是01/01/13, 01/02/13, 01/03/13, 01/04/13, 01/05/13,因此是每月的(英国)
例如,另一个序列可能是01/12/12, 01/03/13, 01/06/13, 01/09/13, 01/12/13,因此是季刊(英国)
第二,第一个可以解决的问题,所有的日期都有吗?没有空隙。我解决这个问题的一种方法是说,要么是每月/每季度,要么是不知道,但那是在C#。
谢谢
发布于 2014-02-16 17:10:08
您可以使用DATEDIFF()函数来比较两个日期,还可以使用一个自连接函数和ROW_NUMBER()函数来比较来自不同行的日期:
;WITH cte AS (SELECT *, ROW_NUMBER() OVER (ORDER BY dt) RN
FROM Table1)
SELECT DATEDIFF(day,a.dt,b.dt)
FROM cte a
JOIN cte b
ON a.RN = b.RN-1如果使用的是SQL 2012,则可以使用LEAD()函数比较来自不同行的值:
SELECT DATEDIFF(day,dt,LEAD(dt,1) OVER(ORDER BY dt)) AS Days
,DATEDIFF(quarter,dt,LEAD(dt,1) OVER(ORDER BY dt)) AS Quarters
FROM Table2演示:SQL Fiddle
https://stackoverflow.com/questions/21814223
复制相似问题