什么是每天按时间间隔分组数据的最佳方式
所以间隔就像:0:00 - 7:00 // 7:00 - 19:00 // 19:00 - 0:00
我也想在白天获得数据 这是我有多远:
SELECT bj, name, sum(uptime) as uptime, env, startTimeFrame, endTimeFrame, DATE(startTimeFrame) as s_date, DATE(endTimeFrame) as e_date FROM `uptime_hourly` group by bj, env, s_date
答案 0 :(得分:2)
您当前的查询存在许多问题,包括您在使用GROUP BY
时选择非聚合列。在大多数情况下,这在逻辑上是不正确的。在任何情况下,我都可以提供以下查询,该查询使用startTimeFrame
的时间组件按您所描述的三个时间间隔对数据进行分组。
SELECT t.bj, SUM(t.uptime) AS uptime, t.env, t.s_date,
CASE WHEN t.h_date < '07:00:00' THEN '0:00 - 7:00'
WHEN t.h_date >= '07:00:00' AND t.h_date < '19:00:00' THEN '7:00 - 19:00'
ELSE '19:00 - 0:00' END AS time_interval
FROM
(
SELECT bj, uptime, env, DATE_FORMAT(DATE(startTimeFrame), '%H:%i:%s') AS h_date,
DATE_FORMAT(DATE(startTimeFrame), '%Y-%m-%d') AS s_date
FROM uptime_hourly
) t
GROUP BY t.bj, t.env, t.s_date,
CASE WHEN t.h_date < '07:00:00' THEN '0:00 - 7:00'
WHEN t.h_date >= '07:00:00' AND t.h_date < '19:00:00' THEN '7:00 - 19:00'
ELSE '19:00 - 0:00' END
答案 1 :(得分:0)
GROUP BY (UNIX_TIMESTAMP(time_stamp) + 5) DIV 30
应该给你hh:mm:05和hh:mm:35之间以及hh:mm:35和hh:mm + 1:05之间的总和。