Mysql组按时间间隔和日期

时间:2017-03-28 08:49:36

标签: mysql

什么是每天按时间间隔分组数据的最佳方式 所以间隔就像: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

2 个答案:

答案 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之间的总和。