0

エンジンの履歴データを照会する SQL データベースがあります。機能の 1 つは、ストアド プロシージャが特定のイベントのすべてのデータを毎日検索し、イベントが見つかった場合は、それを新しいテーブルに挿入することです。

問題は、このデータが一意でなければならないことです...

表のヘッダーは次のとおりです。

ID / ID_Location / IDDown / IDUp / DtDown / DtUp / TimeDifference / IsExempt / Reason / Details / OrigDtUp

SQLクエリは次のとおりです。

insert into exempts(ID_Location, iddown, idup, dtdown, dtup, timedifference)
select ID_Location, iddown, idup, dtdown, dtup, DATEDIFF(MINUTE, dtdown, dtup) as timedifference
from @tmptbl
except
select ID_Location, iddown, idup, dtdown, dtup, timedifference from exempts

しかし、ユーザーがリスト内の任意の値に変更でき、元の値が移動するため、列DtUpOrigDtUp列の両方をチェックし、時間差を無視するクエリが必要です。そのため、レコードは異なり、レコードは元の値で再挿入されますか? ?DtUpDtUpOrigDtUp

前もって感謝します!!ニール

4

1 に答える 1

2

左結合を使用すると、ロジックが見やすくなります。

   insert into exempts(ID_Location, iddown, idup, dtdown, dtup, timedifference) 
    select t.ID_Location, t.iddown, t.idup, t.dtdown, t.dtup, DATEDIFF(MINUTE, dtdown, dtup) as timedifference 
    from @tmptbl as t
      left join exempts as e 
        on  t.ID_Location = e.ID_Location 
        and t.iddown = e.iddown
        and t.idup = e.idup
        and t.dtdown = e. dtdown
        and t.DtUp = e.OrigDtUp --  <<  Match diff columns here
    where t.ID_Location is null
于 2012-05-10T11:54:36.610 に答える