首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql -按最后一条记录分组

问mysql -按最后一条记录分组
EN

Stack Overflow用户
提问于 2020-01-07 10:56:03
回答 3查看 49关注 0票数 0

我的表有多个n_no列的记录,当我执行GROUP BY时,它会返回该组的第一条记录,如何获取最后一条记录?

代码语言:javascript
复制
SELECT * FROM mytable WHERE category = 16 AND status = 1 AND datetime >= "2020-01-06 00:00:00" AND datetime <= "2020-01-06 23:59:59" GROUP BY n_no ORDER BY datetime DESC LIMIT 0,30

谢谢。

通过做来解决

代码语言:javascript
复制
SELECT * FROM mytable WHERE (SELECT MAX(datetime) from mytable GROUP BY n_no) AND category = 16 AND status = 1 AND datetime >= "2020-01-06 00:00:00" AND datetime <= "2020-01-06 23:59:59" GROUP BY n_no ORDER BY datetime DESC LIMIT 0,30
EN

回答 3

Stack Overflow用户

发布于 2020-01-07 11:08:28

假设您使用的是MySQL 8+,那么ROW_NUMBER()可以在这里工作:

代码语言:javascript
复制
WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY n_no ORDER BY datetime DESC) rn
    FROM mytable
    WHERE category = 16 AND status = 1 AND
          datetime >= '2020-01-06' AND datetime < '2020-01-07'
)

SELECT *
FROM cte
WHERE rn = 1;
票数 1
EN

Stack Overflow用户

发布于 2020-01-07 11:10:33

"GROUP BY“的概念是获取类别。不选择记录。

代码语言:javascript
复制
SELECT DISTINCT n_no, datetime, category, status, etc 
FROM mytable 
WHERE category = 16 
AND status = 1 
AND datetime BETWEEN "2020-01-06 00:00:00" AND "2020-01-06 23:59:59" 
ORDER BY datetime DESC
LIMIT 1

通过这种方式,您可以获得每个n_no的最后日期的所有记录

票数 0
EN

Stack Overflow用户

发布于 2020-01-07 12:27:22

你可以尝试下面这样的方法。

代码语言:javascript
复制
SELECT * FROM mytable WHERE pk_col in (SELECT max(pk_col) FROM mytable WHERE category = 16 AND status = 1 AND datetime >= "2020-01-06 00:00:00" AND datetime <= "2020-01-06 23:59:59" GROUP BY n_no ORDER BY datetime DESC LIMIT 0,30)

在这里,将pk_col替换为表的主列名称。

请找到示例here。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59621612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档