2016-10-30 4 views
0

2つのテーブルがあります。表1に表2より大きい日付がある場合、それらのレコードのみが出力に取り込まれます。Oracleのテーブルから最大である場合にのみ欠損日付を選択

表1:

ID Category Date 
1 A  3/2/1990 
1 A  3/5/2013 
1 C  4/3/1979 
2 D  4/3/1970 
2 D  5/6/2016 
3 E  8/8/2016 

は表2:

ID Category Date 
1 A  3/2/1990 
1 C  4/3/1979 
1 C  4/3/1982 
1 D  4/3/1982 
2 D  5/6/2016 

予想される出力は、私は以下のクエリを試してみましたが、その私に間違った結果を与える

ID Category Date 
1 A  3/5/2013 
3 E  8/8/2016 

です。必要な出力を1として

select a.id,a.category,a,Date from table1 a where 
a.Date > (select Max(b.Date) from table2 b where a.id=b.id and a.category =b.catgory group by b.id,b.category) 

答えて

1

SQL Fiddle Demo

WITH cte AS ( 
    SELECT ID, Category, MAX(Date) as mdate 
    FROM Table2 
    GROUP BY ID, Category  
)  
SELECT T1.* --, T2.* 
FROM Table1 as T1 
LEFT JOIN cte as T2 
    ON T1.ID = T2.ID 
AND T1.Category = T2.Category 
WHERE T1.Date > T2.mdate 
    OR T2.mdate is NULL 

OUTPUT

enter image description here

+0

修正とデモの確認編集 –

0
SELECT T1.* 
FROM Table1 AS T1 INNER JOIN Table2 AS T2 
    ON T1.ID = T2.ID 
WHERE T1.Date > T2.mdate; 
0

、あなたは012を使用する必要があります

SELECT T1.* 
FROM table1 T1 
LEFT OUTER JOIN (
    SELECT ID 
     ,category 
     ,MAX(Date) mdate 
    FROM Table2 
    GROUP BY ID 
     ,category 
    ) T2 ON (
     T1.ID = T2.ID 
     AND T1.category = T2.category 
     ) 
WHERE T1.date > nvl(T2.mdate, '01/01/1900'); 
0

フィルタリング表2:今すぐを作成するために、これを使用して

SELECT ID, Category,MAX(Date) as Date 
FROM Table2 
GROUP BY ID,Category; 

| ID | Category |     Date | 
|----|----------|-------------------------| 
| 1 |  A | March, 02 1990 00:00:00 | 
| 1 |  C | April, 03 1982 00:00:00 | 
| 1 |  D | April, 03 1982 00:00:00 | 
| 2 |  D | May, 06 2016 00:00:00 | 

は、表1にに参加左:

SELECT t1.* 
FROM Table1 t1 LEFT JOIN 
    (SELECT ID, Category,MAX(Date) as Date 
    FROM Table2 
    GROUP BY ID,Category) AS t2part 
    ON t1.ID = t2part.ID 
    AND t1.Category = t2part.Category 
WHERE t1.Date > t2part.Date; 

| ID | Category |     Date | 
|----|----------|-------------------------| 
| 1 |  A | March, 05 2013 00:00:00 | 

、ID = 3で、その行に注意してくださいJOIN内のIDまたはカテゴリに一致しないため、category = Eが見つかりませんでした。 実例として、エンティティが相互作用する必要がある場合、インデックスを通じた結合を最大限に活用できるように、何らかの正規化を適用する必要があります。

fiddleあなたの提供するデータとクエリ。

関連する問題