1

特定のIDのテーブルの日付が重複していないかどうかを調べようとしています。これが私のテーブルの例です

ID   |  EffDate    | ExpDate
---------------------------------
1    |  2000-01-01 | 2010-12-31
2    |  2000-01-01 | 2050-12-31
1    |  2011-01-01 | 2011-12-31
1    |  2011-12-31 | 2050-12-31

TableAここでは、IDが「自分自身」と交差しないことを確認する必要があります。これにより、1が他のIDと交差することはありませんが、effとexpの日付がID2と交差するかどうかは関係ありません。

完全な答えを探しているのではなく、出発点にすぎません。

前もって感謝します

4

2 に答える 2

6

IDこれにより、 1 に等しい2 つの行の重複が検出されます。

declare @TabA table (ID int,EffDate datetime2,ExpDate datetime2)
insert into @TabA(ID,EffDate,ExpDate) values
(1,'20000101','20101231'),
(2,'20000101','20501231'),
(1,'20110101','20111231'),
(1,'20111231','20501231')

select
    * --TODO -Pick columns
from
    @TabA t1
        inner join
    @TabA t2
        on
            t1.ID = t2.ID and
            t1.EffDate <= t2.ExpDate and --Play with these
            t1.ExpDate >= t2.EffDate and --For Inclusive/Exclusive
            t1.EffDate < t2.EffDate

結果:

ID          EffDate                ExpDate                ID          EffDate                ExpDate
----------- ---------------------- ---------------------- ----------- ---------------------- ----------------------
1           2011-01-01 00:00:00.00 2011-12-31 00:00:00.00 1           2011-12-31 00:00:00.00 2050-12-31 00:00:00.00

比較演算子を使用してEffDateExpDate包含的または排他的な境界値のいずれかまたは両方を作成できます。

于 2012-08-06T13:10:08.300 に答える
0

私はこれにかなり簡単な解決策があるかもしれないと思います:

    select  distinct ta2.*
    from    #TableA ta1 join #TableA ta2 on 
            (ta1.EffDate > ta2.EffDate and ta1.EffDate < ta2.ExpDate)
            or (ta1.ExpDate > ta2.EffDate and ta1.ExpDate < ta2.ExpDate)
于 2012-08-06T13:07:05.717 に答える