既存の @table があります
ID Date Val
1 2014-10-01 1
2 2014-10-02 1
3 2014-10-03 1
4 2014-10-04 1
5 2014-10-05 1
6 2014-10-06 1
7 2014-10-07 1
8 2014-10-08 1
9 2014-10-09 1
日付順は重要です。各 Val シーケンスの最初と最後の日付を確認する必要があります。
Select Val,MIN([Date]) as A, MAX([Date]) as B
from @T
Group by Val
Val From To
1 2014-10-01 2014-10-09
Val 列は、次の 3 つのエントリで変更されます。
Update @T set Val = 2 where [ID] between 3 and 5
そして戻ります:
ID Date Val
1 2014-10-01 1
2 2014-10-02 1
3 2014-10-03 2
4 2014-10-04 2
5 2014-10-05 2
6 2014-10-06 1
7 2014-10-07 1
8 2014-10-08 1
9 2014-10-09 1
シーケンスごとに最小/最大の日付を返すように SQL を取得するにはどうすればよいですか? 私は示す必要があります:
すなわち
1 2014-10-01 2014-10-02
2 2014-10-03 2014-10-05
1 2014-10-06 2014-10-09
通常の Min/Max クエリを実行すると、
1 2014-10-01 2014-10-09
2 2014-10-03 2014-10-05
これは、val が第 1 ピリオドで 1、第 2 ピリオドで 2、第 3 ピリオドで再び 1 であることを示していません。
declare @T table(ID int,[Date] date,Val int)
Insert Into @T(ID,[Date],Val)
values(1,'2014/10/01', 1),
(2,'2014/10/02', 1),
(3,'2014/10/03', 1),
(4,'2014/10/04', 1),
(5,'2014/10/05', 1),
(6,'2014/10/06', 1),
(7,'2014/10/07', 1),
(8,'2014/10/08', 1),
(9,'2014/10/09', 1)