微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在mysql8数据库中为每个ID选择最后一行?

如何解决如何在mysql8数据库中为每个ID选择最后一行?

我正在使用MysqL8服务器。拥有这样的表格,并希望为每个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,34),(3,24,14),(4,64),(5,53),(6,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

Demo

为了在按ORDER BY id DESC值(good_id)分组的id(PARTITION BY good_id)排序时返回最后一行

,

您可以尝试对由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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。