如何在 mysql8 数据库中为每个 id select 1 最后一行?

How to select 1 last row for each id at mysql8 database?

我正在使用 mysql8 服务器。有这样的 table 并且想要为每个 good_id.

接收最后一行
CREATE TABLE good_states (`ID` int, `good_id` int, `sales` int);
    
INSERT INTO good_states (`id`, `good_id`, `sales`)
VALUES
    (1, 25, 33),
    (2, 25, 34),
    (3, 24, 14),
    (4, 25, 64),
    (5, 24, 53),
    (6, 24, 457),
    (7, 35, 96)
;

http://www.sqlfiddle.com/#!9/735bb60/1

这个查询

SELECT * FROM good_states  WHERE `good_id` IN (25,24) GROUP BY good_id

return 给我每个 good_id 从 good_states 的第一行,但我需要收到每个 good_id.

的最后一行
3 | 24 | 14
1 | 25 | 33

我想收到这样的东西

6 | 24 | 427
4 | 25 | 64

按 id DESC 排序 - 只是在这里不起作用。作为 GROUP BY 以 ASC 方式排序答案。有什么方法可以在没有 GROUP by 的情况下做我想做的事吗?

您可以尝试对按 good_id

分组的最大 ID 使用内部联接
select g.* from good_states g
inner join (
  SELECT max(id) max_id, good_id 
  FROM good_states 
  group by good_id
) t on t.nax_id = g.id
  order by g.id desc

可以使用ROW_NUMBER()解析函数:

SELECT * FROM
(
SELECT g.*,
       ROW_NUMBER() OVER (PARTITION BY good_id ORDER BY id DESC) AS rn
  FROM good_states g  
 WHERE `good_id` IN (25,24) 
) q
WHERE rn = 1

Demo

为了 return 最后一行,只要按 id(ORDER BY id DESC) 排序,按 good_id 值 (PARTITION BY good_id)

分组