简体   繁体   中英

How can I get the latest item price and new price in mysql query

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM