我在SQL Server表中有一个日期列表,需要找出一些关于它们的单独主题:
首先,每月或每季度的日期是?日期总是从这个月的第一天开始。
E.g。一个序列可能是01/01/13, 01/02/13, 01/03/13, 01/04/13, 01/05/13
因此每月(英国)
E.g。另一个序列可能是01/12/12, 01/03/13, 01/06/13, 01/09/13, 01/12/13
因此每季度(英国)
其次,可能由第一个解决的是所有日期?例如没有差距。我解决这个问题的一种方法是说它是月度/季度或者不知道,但那是在C#中。
由于
答案 0 :(得分:0)
您可以使用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