按时间间隔和日期划分的Mysql组
以每天的时间间隔对数据进行分组的最佳方式是什么 所以间隔应该是:0:00-7:00//7:00-19:00//19:00-0:00 我还想每天都有数据。 这就是我取得的成绩:按时间间隔和日期划分的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
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关键字,我不应该把它当作别名。使用不带引号的时间间隔应该可以很好地回答我的最新答案。