mysql - 如何调节时间列?
问题描述
有一列代表 24 小时。数据每 15 分钟输入一次。例如,在 10:15,在 10H 列的 DateTime 列中输入值。但是... 客户想把当天的标准定在早上 6:30,然后把它定为第二天的 6:30。如果您查看下面的列,应该将第 6h 列的值相加。有什么办法吗?
DateTime 0H 1H ..6H....7H...8H..9H..10H..~23H
2020 11 10 00:00:00 979 958
2020 11 10 00:15:00 987 954
2020 11 10 00:30:00 987 958
2020 11 10 00:45:00 960 956
2020 11 11 00:00:00 0 0
2020 11 11 00:15:00 0 0
2020 11 11 00:30:00 0 0
2020 11 11 00:45:00 0 0
2020 11 12 00:00:00 995 995
2020 11 12 00:15:00 991 993
2020 11 12 00:30:00 1000 993
2020 11 12 00:45:00 993 996
I want value
2020-11-15 06:30 ~ 2020-11-16 06:30 values sum
解决方案
考虑将小时块分成SELECT
添加相应小时列的单独段。然后,通过 将所有部分绑定在一起UNION ALL
。最后,为 final 聚合所有小时块SUM
。
下面总结了2020-11-15 06:30 - 2020-11-16 06:30
(不包括上限)之间的所有值。请务必填写...
所需列的缩写:
SELECT SUM(sub.HoursTotal) AS DayTotal
FROM
(
-- PARTIAL HOUR - 6:30 AM - 6:45 AM
SELECT [6h] AS HoursTotal
FROM myTable
WHERE logdatetime BETWEEN '2020 11-15 00:30:00' AND
'2020 11-15 00:45:00'
UNION ALL
-- FULL HOURS - 7:00 AM - 23:00 PM
SELECT [7h] + [8h] + ... + [23h] AS HoursTotal
FROM myTable
WHERE logdatetime BETWEEN '2020 11-15 00:00:00' AND
'2020 11-15 00:45:00'
UNION ALL
-- FULL HOURS - 12:00 AM - 5:00 AM
SELECT [0h] + [1h] + ... + [5h] AS HoursTotal
FROM myTable
WHERE logdatetime BETWEEN '2020 11-16 00:00:00' AND
'2020 11-16 00:45:00'
UNION ALL
-- PARTIAL HOUR - 6:00 AM - 6:15 AM
SELECT [6h] AS HoursTotal
FROM myTable
WHERE logdatetime BETWEEN '2020 11-16 00:00:00' AND
'2020 11-16 00:15:00'
) sub
当然,理想情况下,您的表会保持一个规范化的长格式结构,其中包含两列日期时间和值。然后,查询要容易得多:
logDateTimewithHour Value
2020 11-15 00:00:00 ###
2020 11-15 00:15:00 ###
2020 11-15 00:30:00 ###
2020 11-15 00:45:00 ###
2020 11-15 01:00:00 ###
2020 11-15 01:15:00 ###
2020 11-15 01:30:00 ###
2020 11-15 01:45:00 ###
... ...
2020 11-16 22:00:00 ###
2020 11-16 22:15:00 ###
2020 11-16 22:30:00 ###
2020 11-16 22:45:00 ###
2020 11-16 23:00:00 ###
2020 11-16 23:15:00 ###
2020 11-16 23:30:00 ###
2020 11-16 23:45:00 ###
SELECT SUM(Value) AS DayTotal
FROM myLongTable
WHERE logDateTimewithHour BETWEEN '2020 11-15 06:30:00'
AND '2020 11-16 06:15:00'
推荐阅读
- css - 省略未添加到材质 UI 选项卡文本中
- javascript - Zeit Now 路由问题。重新加载索引页面以外的页面时未找到 404
- c++ - sfml 一次管理多个窗口
- image - 不变违规:App(...) 渲染没有返回任何内容。这通常意味着缺少 return 语句。反应原生
- c++ - 为什么将指针分配为动态对象和数组有效?
- javascript - 动态添加的javascript代码中的缓存问题
- java - 我如何使用指纹管理器在 android 10 上获取 (getFingerId)
- c++ - 问题 19 项目欧拉计数星期日
- javascript - 无法让 AJAX 提交工作以更新 post_content
- yii2 - 如何配置 Yii2 UrlManager 以处理带有和不带有斜杠的规则