
将用户电子邮件地址转置到列中以显示最新记录
假设有一个表格列出了每个用户的多个电子邮件地址。目标是将这些电子邮件转置到列中,根据其创建日期显示“最新”的三个地址。这将生成如下所示的输出表:
| 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中文网其他相关文章!