在我的項目我有用戶的電子郵件郵件表:選擇最近的幾封電子郵件作爲一個行
| 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