我正在使用mysql8服务器。有这样的表,并希望为每个 good_id 接收最后 1 行。
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
返回每个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 的情况下做我想做的事?
最佳答案
您可以使用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
为了返回最后一行,只要按 id 排序(ORDER BY id DESC
),按 good_id
值分组(PARTITION BY good_id
)
关于mysql - 如何在 mysql8 数据库中为每个 id 选择 1 最后一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64403745/