在我的项目我有用户的电子邮件邮件表:选择最近的几封电子邮件作为一个行
| ID | PROFILE_ID | EMAIL | LAST_UPDATED_TIMESTAMP|
___________________________________________________________________
| 1| 1| [email protected]| 2017-02-02 15:13:46|
| 2| 1| [email protected]| 2017-02-01 15:13:46|
| 3| 2| [email protected]| 2017-02-03 15:13:46|
其中PROFILE_ID指用户配置表中的配置文件。我想获得2(通常N)最近为每个用户轮廓不同的邮件作为一个行:
| PROFILE_ID | EMAIL_1 | EMAIL_2 |
__________________________________________________
| 1| [email protected]| [email protected]|
| 2| [email protected]| NULL|
我试了很多疑问,最后一个我停在低于:
SELECT
EMAIL1.PROFILE_ID,
EMAIL1.EMAIL AS EMAIL_1,
EMAIL2.EMAIL AS EMAIL_2
FROM EMAILS EMAIL1
LEFT JOIN
EMAILS EMAIL2
ON EMAIL1.PROFILE_ID = EMAIL2.PROFILE_ID AND EMAIL2.LAST_UPD_TMST <= EMAIL1.LAST_UPD_TMST AND EMAIL1.ID <> EMAIL2.ID
,但它让我对配置文件包含几封电子邮件额外的记录:
| PROFILE_ID | EMAIL_1 | EMAIL_2 |
__________________________________________________
| 1| [email protected]| [email protected]|
| 1| [email protected]| NULL|
| 2| [email protected]| NULL|
我用的Oracle 11g,但如果可能的话牢记MySQL的兼容性。任何人都可以说在上面提到的查询中有什么错误?
是2每个profile_id的最大邮件数量? – JohnHC
“通常情况下,N”不起作用,因为在Oracle中,输出中的列数必须在分析时已知,在数据被检查之前很久 - 而N取决于表中的数据。为什么你想在SQL中而不是在你的报告应用程序中做到这一点? – mathguy
@JohnHC,不,每个配置文件可能会有两个以上的电子邮件。 – Doe