2016-10-10 52 views
1

,所以我一直在嘗試OVER和PARTITION BY,但都沒有成功。SQL - 日期之間的天關根據不同的列

這裏是我有2列; 1是序列號,並將具有多個具有相同序列號的條目。第二個是日期。

什麼,我試圖做的是基於計數過的序列號2個日期之間的天數。我可以很容易地做到datediff我不知道如何計算特定序列號的日期之間的差異。

例如:序列號1234具有2016年1月1日的日期,記錄有以下的序列號1234和二零一五年十二月三十零日日期,以便差爲2天,低於該記錄具有序列號1234和一個日期爲12/27/2015,所以差額爲3天,但THAT下面的記錄的序列號爲4321,日期爲12/25/2015:減法需要在那裏停止,因爲序列號不同並且開始尋找相同的4321序列號。

任何幫助,非常感謝。

+0

請張貼一些樣本輸入和期望的輸出 – Teja

+0

哪些DBMS您使用的? –

+0

很抱歉,剛剛重新登錄 - 出城的一對夫婦 - 我使用SQL 2012 - 所需的輸出正是約翰下面貼 - 謝謝大家的幫助 – Fredderf81

回答

0

你的問題可能被格式化更好(更多的數據,更少的利弊)

據我所知,這是否幫助?

Declare @YourTable table (Serial int,SomeDate date) 
Insert Into @YourTable values 
(1234,'2016-01-01'), 
(1234,'2015-12-30'), 
(1234,'2015-12-27'), 
(4321,'2015-12-25') 

Select A.* 
     ,NbrOfDays = DateDiff(DD,Lag(SomeDate,1,SomeDate) over (Partition By Serial Order By SomeDate),SomeDate) 
From @YourTable A 
Order By Serial,SomeDate Desc 

返回

Serial SomeDate NbrOfDays 
1234 2016-01-01 2 
1234 2015-12-30 3 
1234 2015-12-27 0 
4321 2015-12-25 0 
+0

約翰 - 非常感謝你 - 這正是我所需要的。 – Fredderf81

+0

@RyanOtto樂於助人。不要害羞......選擇它作爲答案 –

-1
SELECT serial_number, 
     DATEDIFF(date, 
       LEAD(date, 1) OVER (PARTITION BY serial_number ORDER BY 
       date DESC) 
       ) AS count_days 
    FROM table; 
+0

爲什麼有downvote? – Teja

+0

Teja - 我沒有downvote - 不幸的是我不能upvote,因爲我沒有足夠的...代表...這不正確的工作,因爲我需要它...爲這個問題,但是,我能夠用它來處理另一個問題,我有一個不同的報告 - 謝謝=) – Fredderf81