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