如何 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_NUMBER
window函数
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
任何人都可以帮助我如何 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_NUMBER
window函数
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