我有一個表,其結構如下選擇實時值的時間間隔 - 缺少第一個和最後一個間隔
| ChangedDate | IDParameter | ChangedTo(位列)|
所以我需要的時間間隔時,我的參數是真還是假,像下面
| IDParameter | ChangedToDate1 | ChangedToDate2 | ChangedTo(真亦假||假爲真)
和我做
With RankedDates As
(
Select T1.[ChangedDate], T1.ID, T1.[ChangedToValue]
, Row_Number() Over(Partition By T1.ID Order By T1.[ChangedDate]) As Num
From [Changes] As T1
)
SELECT T1.[ID]
,T2.[ChangedToValue]
,T1.[ChangedDate] AS startDate
,T2.[ChangedDate] AS endDate
FROM [RankedDates] AS T1
Join RankedDates As T2
On T2.ID = T1.ID
And T2.Num = T1.Num + 1
And T2.[ChangedToValue] <> T1.[ChangedToValue]
Order By T2.[ChangedDate]
麻煩的是,我第一次失蹤,最後一個時間間隔在這裏。對於開始日期,如果是第一個,則它必須爲NULL,對於每個參數ID,它的最後時間間隔的endDate必須爲NULL。我想我需要添加它與聯盟,但我的麻煩,我不明白如何爲每個IDParameter添加它。
我不知道什麼時候第一次更改了值,我不知道值是否會在任何時候改變,所以我需要NULL或一些mindate的第一個時間間隔和NULL或最後一個時間間隔的一些maxdate。
ms sql server 2008
對於這樣複雜的問題感到抱歉。
實施例:
08.03.2011 ID1 0 -> 1
09.03.2011 ID1 1 -> 0
09.03.2011 ID2 0 -> 1
10.03.2011 ID1 0 -> 1
10.03.2011 ID2 1 -> 0
--->
NULL , 08.03.2011 ID1 is 0
NULL , 09.03.2011 ID2 is 0
08.03.2011, 09.03.2011 ID1 is 1
09.03.2011, 10.03.2011 ID2 is 1
09.03.2011, 10.03.2011 ID1 is 0
10.03.2011, NULL ID1 is 1
10.03.2011, NULL ID2 is 0
我喜歡你說的複雜的編程問題遺憾的事實...複雜性是最愛極客的東西:) – Simeon 2011-03-09 08:29:21
複雜的問題也是我們需要和擁有這樣的網站的主要原因,即使人們現在也帶着基本的知識問題來到這裏。 – 2011-03-09 10:39:07