mysql 获取SQL中不同ID的前5条最新记录[duplicate]

elcex8rz  于 2022-12-26  发布在  Mysql
关注(0)|答案(2)|浏览(239)
    • 此问题在此处已有答案**:

SQL select only rows with max value on a column [duplicate](27个答案)
3天前关闭。
我有一个名为Work_Items的表,如下所示:

假设这个表中有很多名称(例如,E、F、G、H、I等)以及它们各自的日期和生产项目。这是一个庞大的表,所以我想编写一个优化的查询。
在这里,我想查询最新的A、B、C、D记录。
我使用了以下查询:

SELECT * FROM Work_Items WHERE Name IN ('A','B','C','D') ORDER BY Date DESC OFFSET 0 LIMIT 4

但是这个查询的问题是,因为我是按日期排序的,所以我得到的最新4条记录是:

我想得到这个结果:

请帮助我修改查询,谢谢。

pcrecxhr

pcrecxhr1#

在MySQL 8+中,我们可以使用ROW_NUMBER

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Date DESC) rn
    FROM Work_Items
    WHERE Name IN ('A', 'B', 'C', 'D')
)

SELECT Name, Date, ProducedItems
FROM cte
WHERE rn = 1
ORDER BY Name;
y1aodyip

y1aodyip2#

你可以使用内部连接,如下所示,它的工作在任何版本的mysql:

select w.name, w.`date`, w.ProducedItems
from _Work_Items w
inner join (
    select name, max(date) as `date`
    from _Work_Items
    group by name
) as s on s.name = w.name and s.`date` = w.`date` ;

相关问题