2016-06-27 45 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 
相关问题