2011-07-21 10 views
0

select文でwhere句のタイトルを明確にするために、別のselectを使用してテーブルを確認する必要があります。その2番目の選択では、私はすべてのセカンダリIDを見つける必要があります。ここでevnt_idが外部キーである、私はコードを明確にするためSQL文を実行中に特定の行と列のデータを選択することができます

これまで
Declare @id INT 

--inserting values in temp table 
SELECT 
    rn = ROW_NUMBER() OVER (ORDER BY adt_trl_dt_tm), 
    * 
INTO #Temp 
FROM dbo.EVNT_HSTRY 
ORDER BY adt_trl_dt_tm DESC 

--Searching for items that are deleted and have not been restored 
SELECT * 
FROM dbo.EVNT_HSTRY hstry 
WHERE evnt_hstry_cd LIKE '3' and 
adt_trl_dt_tm > (SELECT adt_trl_dt_tm FROM dbo.EVNT_HSTRY WHERE evnt_id = evnt_id 

DROP TABLE #Temp 

を働いてきたものです。主キーはevnt_Hstry_idです。 evnt_hstry_cd 3は削除されています。私がしようとしているのは、同じevnt_idを持つすべてのadt_trl_dt_tmフィールドと比較することによって、読み取っている行のフィールドadt_trl_dt_tm(最終更新日)が最新であるかどうかを確認することです。

私が選択しているテーブルは、イベントの履歴を保存するテーブルです。イベントが追加、変更、削除、または復元されたときの位置です。

悲しいことに、このステートメントはSSISで実行されているため、悲しいことに、私のアプリケーションにはできません。

全体として、adt_trl_dt_tmadt_trl_dt_tmと同じものを比較して、同じevnt_idを選択し、最新のものを選択する必要があります。

答えて

0

データでこれをテストできますか?

SELECT * 
FROM dbo.EVNT_HSTRY hstry 
WHERE evnt_hstry_cd LIKE '3' and 
not exists (select 1 from EVNT_HSTRY WHERE hstry.evnt_id = evnt_id 
AND Hstry.adt_trl_dt_tm > adt_trl_dt_tm) 
+0

ありがとう、私はそのトリックをしたと思う、私はもっと深くテストする必要がありますが、それは良いようです。 – Hugo

0
SELECT * 
FROM dbo.EVNT_HSTRY hstry 
WHERE evnt_hstry_cd = '3' and 
adt_trl_dt_tm = (
        SELECT max(adt_trl_dt_tm) FROM dbo.EVNT_HSTRY WHERE evnt_id = hstry.evnt_id 
      ) 

行になり、より最近の行がでIF =コード3

変更等が有していない場合、コード3はhstryなし行の最新のエントリである場合に読み込まそれは正確に一致します

関連する問題