mysql - 在mysql中使用group by子句选择带有日期和时间列的最新记录
问题描述
我有这张表,我必须根据每个检查站的日期和时间列从中选择最新的行
我尝试了以下查询,但没有返回每个检查站的最新数据。
SELECT checkpost_id,current_rate,date,time FROM revisionrates
WHERE date IN (SELECT max(date) FROM revisionrates GROUP BY checkpost_id)
预期的输出是
解决方案
您可以使用窗口函数:
select rr.*
from (select rr.*,
row_number() over (partition by checkpost_id order by date desc, time desc) as seqnum
from revisionrates rr
) rr
where seqnum = 1;
这需要 MySQL 8.0。在早期版本的 MySQL 中,这有点棘手,但一种方法使用元组
select rr.*
from rr
where (date, time) in (select rr2.date, rr2.time
from revisionrates rr2
where rr2.checkpoint_id = rr.checkpoint_id
order by rr2.date desc, rr2.time desc
limit 1
);
推荐阅读
- android - 如何从多个 Firebase 节点检索属性列表
- javascript - 如何更新嵌套状态对象的键/值(React JS)
- c - 我的代码中的 pointer==null 和 !pointer 有什么区别?
- java - 在 Spring Kafka 中,我是否需要将 @EnableKafka 注释添加到我的应用程序中?
- javascript - 有没有办法等到新页面加载后再执行 JavaScript 中的另一个函数?
- java - JAXB:编写从 XML 文件中解析不同格式日期的方法的最佳方法是什么
- sql - 查询以获取具有相同列值的所有行的总计,以及每列的条件
- ssl - 提供默认证书时“无默认证书,生成一个”
- jsonschema - 当 if-else 存在时 JSON Schema 验证器的额外错误消息
- python - 如何使用 Boto3 搜索 S3 中的数千个对象,只知道部分键名(不是前缀)?