
將使用者電子郵件地址轉置到列中以顯示最新記錄
假設有一個表格列出了每個使用者的多個電子郵件地址。目標是將這些電子郵件轉置到列中,根據其建立日期顯示「最新」的三個位址。這將產生如下所示的輸出表:
| user_name | user_id | email1 | email2 | email3 |
|---|---|---|---|---|
| Mary | 123 | [email protected] | [email protected] | [email protected] |
| Joe | 345 | [email protected] | (NULL) | (NULL) |
為了實現這種轉置,我們可以使用tablefunc模組中的crosstab()函數:
<code class="language-sql">SELECT * FROM crosstab(
$$SELECT user_id, user_name, rn, email_address
FROM (
SELECT u.user_id, u.user_name, e.email_address
, row_number() OVER (PARTITION BY u.user_id
ORDER BY e.creation_date DESC NULLS LAST) AS rn
FROM usr u
LEFT JOIN email_tbl e USING (user_id)
) sub
WHERE rn <= 3
$$,
$$SELECT generate_series(1,3)$$
) AS ct (user_id int, user_name text, email1 text, email2 text, email3 text);</code>外部SELECT語句提取使用者特定數據,根據row_number()函數將結果限制為最新的三個電子郵件地址。然後,crosstab()函數將這些電子郵件轉置到列中,確保缺失值表示為NULL。
以上是如何將使用者電子郵件地址轉換為僅顯示三個最新地址的欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!