i have data in table database:
name | price | dateupdate |
---|---|---|
A | 300 | 2021-06-12 |
A | 500 | 2021-12-01 |
B | 700 | 2022-01-01 |
A | 800 | 2022-01-25 |
B | 1000 | 2022-02-12 |
how to display data in mysql query to be like this:
name | price | dateupdate | price | dateupdate |
---|---|---|---|---|
A | 500 | 2021-12-01 | 800 | 2022-01-25 |
B | 700 | 2022-01-01 | 1000 | 2022-02-12 |
We can use pivoting logic with ROW_NUMBER
here:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY name ORDER BY dateupdate) rn
FROM yourTable
)
SELECT name,
MAX(CASE WHEN rn = 1 THEN price END) AS price1,
MAX(CASE WHEN rn = 1 THEN dateupdate END) AS dateupdate1,
MAX(CASE WHEN rn = 2 THEN price END) AS price2,
MAX(CASE WHEN rn = 2 THEN dateupdate END) AS dateupdate2
FROM cte
GROUP BY name
ORDER BY name;
The above assumes your are using MySQL 8+. If you're not using the latest version of MySQL, you may try the following version:
SELECT
t1.name,
MAX(CASE WHEN t1.dateupdate = t2.mindateupdate THEN t1.price END) AS price1,
MAX(CASE WHEN t1.dateupdate = t2.mindateupdate THEN t1.dateupdate END) AS dateupdate1,
MAX(CASE WHEN t1.dateupdate = t2.maxdateupdate THEN t1.price END) AS price2,
MAX(CASE WHEN t1.dateupdate = t2.maxdateupdate THEN t1.dateupdate END) AS dateupdate2
FROM yourTable t1
INNER JOIN
(
SELECT name, MIN(dateupdate) AS mindateupdate, MAX(dateupdate) AS maxdateupdate
FROM yourTable
GROUP BY name
) t2
ON t2.name = t1.name
GROUP BY
t1.name;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.