There is a column representing 24 hours. Data comes in every 15 minutes. For example, at 10:15, the value is entered in the DateTime column of the 10H column. But… The client wants to set the standard for the day at 6:30 a.m. and set it to 6:30 the next day. If you look at the column below, should sum the value from column 6h.. Is there any way?
DateTime 0H 1H ..6H.7H8H..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
Advertisement
Answer
Consider breaking hour blocks into separate SELECT
segments that add corresponding hour columns. Then, bind all parts together by UNION ALL
. Finally, aggregate all hour blocks for final SUM
.
Below sums all values between 2020-11-15 06:30 - 2020-11-16 06:30
(not including upper limit). Be sure to fill in the abbreviated ...
for needed columns:
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
Of course, ideally your table maintains a normalized structure of long format with two columns for datetime and value. Then, querying is much easier:
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'