2016-06-27 1 views
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] | 
+------+-------+--------------------------------------+ 

Он должен возвращать только один электронной почты для каждой строки, порядок по 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