2016-06-27 15 views
1

メールごとに1つのレコードを選択する方法を教えてもらえますか?レコードごとに1つのメールを選択する方法

私は以下のクエリを持っている:

SELECT a.ID, a.NAME, a.LASTMODIFIED, b.EMAIL 
FROM TABLE_A a 
JOIN TABLE_B b 
ON a.IDA = b.IDB 
WHERE a.LASTMODIFIED <= today 
ORDER BY b.LASTMODIFIED 

それはなります:

+------+-------+--------------------------------------+ 
| id | name | lastmodified  | email   | 
+------+-------+--------------------------------------+ 
| 1 | aa  | 01-JAN-2016  | [email protected] | 
| 2 | bb  | 02-JAN-2016  | [email protected] | 
| 3 | cc  | 03-JAN-2016  | [email protected] | 
| 4 | dd  | 02-JAn-2016  | [email protected] | 
+------+-------+--------------------------------------+ 

期待される結果は次のとおりです。

+------+-------+--------------------------------------+ 
| id | name | lastmodified  | email   | 
+------+-------+--------------------------------------+ 
| 2 | bb | 02-JAN-2016  | [email protected] | 
| 3 | cc | 03-JAN-2016  | [email protected] | 
| 4 | dd | 02-JAN-2016  | [email protected] | 
+------+-------+--------------------------------------+ 

それは、行ごとに1つだけのメールを返す必要があり、順lastmodifiedの日付。

答えて

0

あなたが最後にメールをしたい場合は、期待どおりに動作しますが、

SELECT a.ID, a.NAME, a.LASTMODIFIED, b.EMAIL 
FROM TABLE_A a 
JOIN TABLE_B b ON a.IDA = b.IDB 
WHERE a.LASTMODIFIED <= today 
AND (a.LASTMODIFIED, b.EMAIL) in (
    SELECT max(c.LASTMODIFIED), d.EMAIL 
      FROM TABLE_A c 
      JOIN TABLE_B d ON c.IDA = d.IDB 
      WHERE a.LASTMODIFIED <= today 
      GROUP BY d.EMAIL 
    ) 
ORDER BY b.LASTMODIFIED 
+0

感謝を使用することができます。 – tukimin

1

使用ROW_NUMBERウィンドウ関数

Select id, name, lastmodified, email  
(
Select 
Row_Number()over(partition by email order by lastmodified desc) As Rn, 
.. 
) 
Where RN = 1 
関連する問題