如何 select 每条记录一封电子邮件

How to select one email per record

任何人都可以帮助我如何 select 每封电子邮件一条记录吗?

我有以下查询:

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       | test01@mail.com |
| 2    | bb     | 02-JAN-2016       | test02@mail.com |
| 3    | cc     | 03-JAN-2016       | test01@mail.com |
| 4    | dd     | 02-JAn-2016       | test03@mail.com |
+------+-------+--------------------------------------+

预期结果是:

+------+-------+--------------------------------------+
| id   | name  | lastmodified       | email           |
+------+-------+--------------------------------------+
| 2    | bb    | 02-JAN-2016        | test02@mail.com |
| 3    | cc    | 03-JAN-2016        | test01@mail.com |
| 4    | dd    | 02-JAN-2016        | test03@mail.com |
+------+-------+--------------------------------------+

它应该 return 每行只有一封电子邮件,按 lastmodified 日期排序。

使用ROW_NUMBERwindow函数

Select id, name, lastmodified, email     
(
Select 
Row_Number()over(partition by email order by lastmodified desc) As Rn,
..
)
Where RN = 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
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