按固定间隔范围分组
Group by fixed interval range
我以 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 的范围内。如果这样的记录存在或在多个 MINDATE * 86400
请帮忙。
这里的工作:
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`
- 看到它在 sqlfiddle
中实时运行
我以 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 的范围内。如果这样的记录存在或在多个 MINDATE * 86400
请帮忙。
这里的工作:
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`
- 看到它在 sqlfiddle 中实时运行