2016-06-27 5 views
1

Kann mir jemand helfen, einen Datensatz pro E-Mail auszuwählen?So wählen Sie eine E-Mail pro Datensatz aus

Ich habe die Abfrage unter:

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 

es führen wird:

+------+-------+--------------------------------------+ 
| 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] | 
+------+-------+--------------------------------------+ 

erwartete Ergebnis ist:

+------+-------+--------------------------------------+ 
| 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] | 
+------+-------+--------------------------------------+ 

Es sollte nur eine E-Mail pro Zeile zurückgeben, um durch lastmodified Datum.

Antwort

0

Wenn Sie die letzte E-Mail möchten, können Sie

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

dank verwenden, es funktioniert wie erwartet. – tukimin

1

Verwenden ROW_NUMBER Fensterfunktion

Select id, name, lastmodified, email  
(
Select 
Row_Number()over(partition by email order by lastmodified desc) As Rn, 
.. 
) 
Where RN = 1 
Verwandte Themen