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

my.reg 发布于 2015/06/03 16:24
阅读 1K+
收藏 2

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

大概结构

id -- 编号

value -- 数据

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

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

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

每天 -- 23:59 这一条

求这个sql语句,谢谢,

加载中
0
霍啸林
霍啸林
最后报表的格式是什么样子
0
wx---每日佳选
wx---每日佳选
建议增加一个表来存储这些数据.
0
d
darkread
你怎么知道是15:59最后一条,还是15:59:59最后一条?
0
张亦俊
张亦俊
按时间排序以后按小时分组以后取出每组最后一个?
0
Z
Zicl
思路是:①先用case when语句,给每条记录打上一个时间分组标识。如果统计的是每小时最后一条,就按小时分组;如果统计每天最后一条,就按日期分组;得到一个表a。 ②在表a的基础上,用group by 语句按时间分组标识分组后,order by atime desc,然后取每个分组的第一条数据。
0
realanan
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));
这语句性能不会太好,强烈建议建一个统计表,用程序定时维护。

yeliuping
yeliuping
where id in id弄丢了
0
yeliuping
yeliuping
select * from table1 where in (select max(id) from table1 group by 时间转换字符串函数(atime,'yymmDDddHH')) 大概这样吧 函数转换格式不对哦,就是大概个意思,一天的统计也一样,函数改下,两条语句 union all 一下, 如果要排序,在按时间 order by 一下 ,就全出来了, 是这样吧?
yeliuping
yeliuping
每天好像可以去掉吧 和每小时的最后一条数据是重复的
0
realanan
realanan

引用来自“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));
这语句性能不会太好,强烈建议建一个统计表,用程序定时维护。

写错了,改下。
select * from table where id in (
select nax(id) from table group by concat_ws('-', year(atime), month(atime), day(atime)));

返回顶部
顶部