SQL 语句 如何统计每小时的最后一条,每天的最后一条

SQL 语句 如何统计每小时的最后一条,每天的最后一条

时光清浅 发布于 2021-11-28 字数 329 浏览 783 回复 10

mysql数据库每分钟记录一条数据

大概结构

id -- 编号

value -- 数据

atime -- 添加时间(Unix时间戳)

如何按照每小时,每天,统计最后一条数据,形成报表。

每小时 -- 取自然小时的最后一条,比如 15:59的这一条

每天 -- 23:59 这一条

求这个sql语句,谢谢,

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

私藏温柔 2021-12-01 10 楼

引用来自“realanan”的评论

select concat_ws('-', year(atime), month(atime), day(atime)), last(value) from table group by concat_ws('-', year(atime), month(atime), day(atime));
select concat_ws(' ', concat_ws('-', year(atime), month(atime), day(atime)), hour(atime)), last(value) from table group by concat_ws(' ', concat_ws('-', year(atime), month(atime), day(atime)), hour(atime));
这语句性能不会太好,强烈建议建一个统计表,用程序定时维护。

空城仅有旧梦在 2021-12-01 9 楼

每天好像可以去掉吧 和每小时的最后一条数据是重复的

情栀口红 2021-12-01 8 楼

select * from table1 where in (select max(id) from table1 group by 时间转换字符串函数(atime,'yymmDDddHH')) 大概这样吧 函数转换格式不对哦,就是大概个意思,一天的统计也一样,函数改下,两条语句 union all 一下, 如果要排序,在按时间 order by 一下 ,就全出来了, 是这样吧?

猫性小仙女 2021-12-01 7 楼

where id in id弄丢了

岁月打碎记忆 2021-12-01 6 楼

select concat_ws('-', year(atime), month(atime), day(atime)), last(value) from table group by concat_ws('-', year(atime), month(atime), day(atime));
select concat_ws(' ', concat_ws('-', year(atime), month(atime), day(atime)), hour(atime)), last(value) from table group by concat_ws(' ', concat_ws('-', year(atime), month(atime), day(atime)), hour(atime));
这语句性能不会太好,强烈建议建一个统计表,用程序定时维护。

晚风撩人 2021-12-01 5 楼

思路是:①先用case when语句,给每条记录打上一个时间分组标识。如果统计的是每小时最后一条,就按小时分组;如果统计每天最后一条,就按日期分组;得到一个表a。 ②在表a的基础上,用group by 语句按时间分组标识分组后,order by 
atime desc,然后取每个分组的第一条数据。

为你鎻心 2021-12-01 4 楼

按时间排序以后按小时分组以后取出每组最后一个?

岁吢 2021-11-29 3 楼

你怎么知道是15:59最后一条,还是15:59:59最后一条?

凡尘雨 2021-11-29 2 楼

建议增加一个表来存储这些数据.

无边思念无边月 2021-11-28 1 楼

最后报表的格式是什么样子