I want to sum up where clause. I don’t know how to show off_duration in the next column.
x
SELECT CAST([RecordDateTime] AS DATE) AS DATE
,SUM(CAST([units] AS FLOAT)) AS Units
,sum(cast(duration AS INT) / 60) on_duration
FROM [Energies]
WHERE duration_mode = 'ON'
GROUP BY CAST([RecordDateTime] AS DATE)
ORDER BY CAST([RecordDateTime] AS DATE) DESC
op
Datet units on_duration
-------------------------------
2020-01-17 3.53 758
2020-01-16 7.66 973
2020-01-15 15.12 1806
2020-01-13 10.4 500
ex op
date units on_duration off_duration
-----------------------------------------------
2020-01-17 3.53 758 28
2020-01-16 7.66 973 9
2020-01-15 15.12 1806 96
2020-01-13 10.4 500 95
sample data
duration_mode duration RecordDateTime units
-------------------------------------------------------------
ON 187 2020-01-07 20:18:33.9744232 0.19
ON 187 2020-01-07 20:19:03.1554359 0.19
OFF 10 2020-01-07 20:22:13.5283932 0.00
ON 187 2020-01-07 20:24:39.0510166 0.19
Advertisement
Answer
I think that you are looking for conditional aggregation:
SELECT
CAST([RecordDateTime] AS DATE) as Date,
SUM(CAST([units] as float)) as Units,
SUM(CASE WHEN duration_mode = 'ON' THEN CAST(duration as int)/60 END) on_duration,
SUM(CASE WHEN duration_mode = 'OFF' THEN CAST(duration as int)/60 END) off_duration
FROM [Energies]
GROUP BY CAST([RecordDateTime] AS DATE)
ORDER BY CAST([RecordDateTime] AS DATE) desc