Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按时间间隔和日期划分的Mysql组_Mysql - Fatal编程技术网

按时间间隔和日期划分的Mysql组

按时间间隔和日期划分的Mysql组,mysql,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

以每天的时间间隔对数据进行分组的最佳方式是什么 所以间隔应该是: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
应该给出hh:mm:05和hh:mm:35之间以及hh:mm:35和hh:mm+1:05之间的总和


应为您提供介于hh:mm:05和hh:mm:35之间以及介于hh:mm:35和hh:mm+1:05之间的总和。

您当前的查询存在许多问题,包括在使用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

当前查询存在许多问题,包括在使用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

谢谢你的回答,它是有效的,但有一个小错误,其他“19:00-0:00”结束作为间隔应该是其他“19:00-0:00”结束作为“间隔”你忘记了周围的引号interval@RobertStevens不,interval是一个MySQL关键字,我不应该将它用作别名。使用不带引号的time_interval应该很好。我的更新答案。谢谢你的答案。它很有效,但有一个小错误,其他“19:00-0:00”结束作为interval,其他“19:00-0:00”结束作为“interval”你忘记了引号interval@RobertStevens不,interval是一个MySQL关键字,我不应该把它当作别名。使用不带引号的时间间隔应该可以很好地回答我的最新答案。