2016-11-07 11 views
1

私は3つの共通フィールドしかない2つのテーブルを持っています。 は、私は1最新の日付のOracleで見つからないレコードを選択してください

Employee Category Date_Field First_Name Last_Name Status Result 
100  Type1 30/08/2010 A   B   Present Good 
200  Type1 1/09/2010 C   D   Hello Alt 
100  Type3 30/09/2010 A   B 
100  Type1 30/09/2012 A   B 


Employee Category Date_Field 
100  Type1  03/11/2016 
100  Type3  30/09/2010 
100  Type4  11/10/2010 
200  Type3  12/12/1989 

私のクエリはiが取得

with x1 as (SELECT Employee,Category,Date_Field,First_Name,Last_Name,Status,Result,' ' as Somefield from table 1 
where not exists 

(select 1 from table2 
where table1.employee=table2.employee and table1.category = table2.Category 
and table1.Date_Field = table2.Date_Field)), 

x2 as (select Employee,Category,Max(Date_Field) as DateField from x1 group by Employee) 

select x1.Employee,x1.Category,x1.Date_Field,x1.First_Name,x1.Last_Name,x1.Status,x1.Result,x1.Somefield from x1,x2 
where x1.Employee = x2.Employee and x1.Date_Field=x2.DateField and x1.Category=x2.Category 
order by x1.Employee; 

現在Ouptputあるテーブルに最新の日付の欠落データをピックアップするには、以下のクエリを書いた

Employee Category Date_Field First_Name Last_Name Status Result 
100  Type1  30/09/2012 A   B 
200  Type1  1/09/2010 C   D  Hello Alt 

缶私はこのクエリを変更して、テーブル2に最新の日付とカテゴリの同じ従業員のレコードがあれば、そのレコードを出力するべきではありません。だから、期待される出力が

Employee Category Date_Field First_Name Last_Name Status Result 
200  Type1 1/09/2010 C   D   Hello Alt 

あなたの助けがずっと

答えて

1

を高く評価されている

あなたはNOT EXISTS句の日付フィールドを無視することができます願っています。

SELECT * FROM TABLE1 T1 
WHERE NOT EXISTS 
(
    SELECT 'x' FROM TABLE2 T2 
    WHERE T1.EMPLOYEE = T2.EMPLOYEE 
    AND T1.CATEGORY = T2.CATEGORY 
    AND T2.DATEFIELD >= T1.DATEFIELD 
) 
+0

Maheshwaran私が日付フィールドを削除している場合は、テーブル1から欠落しているデータを返すことになりますが、これには必要ではありません。私は、カテゴリごとに従業員の最新レコードがテーブル1からあるかどうかをチェックする必要があります。もしそれが設定されていなければ、無視してください。 –

+0

更新されたSQLが役立ちます。 –

+0

これまでに同じことを試しましたが、仕事をしています –

関連する問題