Home > Database > Mysql Tutorial > How to Transpose User Email Addresses into Columns Showing Only the Three Newest?

How to Transpose User Email Addresses into Columns Showing Only the Three Newest?

Patricia Arquette
Release: 2025-01-10 15:41:45
Original
800 people have browsed it

How to Transpose User Email Addresses into Columns Showing Only the Three Newest?

Transpose user email addresses into columns to show latest records

Suppose you have a table listing multiple email addresses for each user. The goal is to transpose these emails into columns that show the "most recent" three addresses based on their creation date. This will produce an output table that looks like this:

user_name user_id email1 email2 email3
Mary 123 [email protected] [email protected] [email protected]
Joe 345 [email protected] (NULL) (NULL)

To achieve this transposition, we can use the crosstab() function in the tablefunc module:

<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>
Copy after login
The

external SELECT statement extracts user-specific data, limiting the results to the three most recent email addresses based on the row_number() function. The crosstab() function then transposes these emails into columns, ensuring that missing values ​​are represented as NULL.

The above is the detailed content of How to Transpose User Email Addresses into Columns Showing Only the Three Newest?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template