我有一个表,其结构如下选择实时值的时间间隔 - 缺少第一个和最后一个间隔
| 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