我有时间以Unix格式int
存储。我想按1天的间隔(即86400秒)对结果进行分组。
样本数据
timestamp | state
+++++++++++++++++++
1540427604 | ABC
1540770300 | PQR
1540770050 | PQR
1540751300 | ABC
我想按每个86400的周期对state
的计数进行分组,即如果有人问从1540425600(即2018年10月25日)到1540771200(即2018年10月29日),那么输出应为
range | state | count
++++++++++++++++++++++++++++++++++++++++++
1540425600 - 1540512000 | ABC | 1
1540684800 - 1540771200 | ABC | 1
1540684800 - 1540771200 | PQR | 2
我已经尝试了很多东西,但是我认为这是更接近的。
select
concat(86400*floor(timestamp /86400), '-', 86400*floor(timestamp/86400) + 86400) as `range` , count(state)
from MT
where timestamp between MINDATE AND MAXDATE
group by `range` order by `range`;
但是我得到的输出不是以传递的MINDATE开头或以MINDATE的倍数开头...但是它在86400的范围内。我希望范围应该总是以mMINDATE开头,如果这样的记录存在或在多个中分钟* 86400
请帮助。
答案 0 :(得分:1)
这是工作:
select
concat(min(floor(timestamp / 86400) * 86400), ' - ', max(floor(timestamp / 86400) * 86400) + 86400) as `range`
, state
, count(*)
from t
group by floor(timestamp / 86400), state
order by `range`