2014-02-16 202 views
0

我有日期在SQL Server表的列表,需要弄清楚幾個獨立的主題,關於他們:SQL服務器的日期範圍,按月或按季度

首先是日期按月或按季度?日期始終在本月的第一天開始。

E.g.一個序列可以是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#編寫的。

感謝

回答

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

+0

我有點看到你來自哪一個。 RowNumber Over是一個很好的開始,謝謝 – TheAfrican

+0

SQL Fiddle也很酷! – TheAfrican