0

SQL Server 2008 r2 の日付範囲のギャップと重複を識別するクエリがあります。それぞれの一意のデータ セットには 12 のレコードがあります。私がやりたいことは、ギャップとオーバーラップを識別するコードを調整または追加し、レコードが連続するように更新することです。

--gaps and overlaps tbl_volumes
with s as
(
select esiid,Read_Start,Read_End ,row_number() over(partition by esiid order by Read_Start) rn
from tbl_Volumes
where Status=0
group by esiid,Read_Start,Read_End)
select a.esiid, a.Read_Start, a.Read_End, b.Read_Start as nextstartdate,datediff(d,a.Read_End, b.Read_Start) as gap
into #go
from s a
join s b on b.esiid = a.esiid and b.rn = a.rn + 1
where datediff(d, a.Read_End, b.Read_Start) not in (0,1)
order by a.esiid

シーケンシャルに表示したい悪いレコード セットを次に示します。

e                   Read_Start  Read_End    Source
10032789402145965   2011-01-21  2011-02-22  867_03_1563303
10032789402145965   2011-02-22  2011-03-21  867_03_1665865
10032789402145965   2011-03-26  2011-04-20  867_03_1782993
4

1 に答える 1

1

Read_end次の値に基づいて各レコードに新しい値を割り当てることができます。新しい開始の計算は、次のように行うことができます。

select t.*,
       (select top 1 Read_Start
        from t t2
        where t2.e = t.e and t2.Read_Start > t.Read_Start
        order by t2.Read_Start
       ) as New_Read_End
from t

実際に値を更新したいですか、それともどうあるべきかを確認したいだけですか?

于 2013-02-06T15:25:20.133 に答える