この形式の古いデータがいくつかあります。
ID DT NUM
1 6-1-2012 2
1 6-2-2012 2
1 6-3-2012 4
1 6-4-2012 4
1 6-5-2012 8
1 6-6-2012 8
1 6-7-2012 8
1 6-8-2012 16
1 6-9-2012 2
1 6-10-2012 2
そして、私はそれがこのように見える必要があります:
ID START_DT END_DT NUM
1 6-1-2012 6-2-2012 2
1 6-3-2012 6-4-2012 4
1 6-5-2012 6-7-2012 8
1 6-8-2012 6-8-2012 16
1 6-9-2012 6-10-2012 2
これは私がすぐに思いつくことができたデータの最良の例です。誤って誤解が含まれていないかどうかを明確にしたいと思います。
ルール:
- ID:これは変更されますが、最終的にはグループ化されます。これにより、私の例でも同じことがわかりやすくなります。
- DT:元の日時が1つありますが、実際のデータでは時間の部分が異なります
- START_DT、END_DT:これらの列を元のDTから取得する必要があります
- NUM:これは変更される整数であり、IDごとに再発する可能性があります
編集:これは非常に厄介です.....(より良い答えがあるはずです)...私はまだ多くの条件でこれをテストしていませんが、最初から大丈夫に見えます....そして手動で見つける必要がありましたすべてのフィールド名を置き換えます(親切にしてください)
select * from (
select *,row_number() over (partition by if_id, [z.num] order by if_id, [y.num]) as rownum
from (
select y.id,
y.dt as [y.dt],
z.dt as [z.dt],
y.num
from #temp as y
outer apply (select top 1 id, dt, num
from #temp as x
where x.id = y.id and
x.dt > y.dtand
x.num <> y.num
order by x.dt asc) as z ) as x ) as k
where rownum=1
order by [y.dt]