如何在 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
为了 return 最后一行,只要按 id(ORDER BY id DESC
) 排序,按 good_id
值 (PARTITION BY good_id
)
分组
我正在使用 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
为了 return 最后一行,只要按 id(ORDER BY id DESC
) 排序,按 good_id
值 (PARTITION BY good_id
)