mysql - 如何在 mysql8 数据库中为每个 id 选择 1 最后一行?

标签 mysql sql select mysql-8.0

我正在使用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

Demo

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

关于mysql - 如何在 mysql8 数据库中为每个 id 选择 1 最后一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64403745/

相关文章:

php - MySQL 查询结果有限

php - 显示新消息通知

sql - MS ACCESS : selecting only one record per "person" per date 中的子查询

mysql - 需要 mySQL PDO JOIN 语句的支持

Html 5 选择列表选项在 chrome 悬停时更改背景颜色

c++ - 为什么 "SHOW PROCESSLIST"不给 Host IP?

mysql - SQL 将连接结果连接到列中

mysql - 如何使用另一个表中的数据更新sql中的表?

php - 数据库搜索失败

python - 如何从输入列表/数组创建单列 SQL 表?