I'm trying to refresh my very rusty SQL skills.
I have a table with device logs, collected every 5 minutes. I'm interested in counting the number of times a device is either 'connected' or 'disconnected' per device, per day.
deviceId, status, tag, timestamp
A, Connected, connectivity, 2022-10-27T09:25:02Z
B, Connected, connectivity, 2022-10-27T09:25:02Z
C, Disconnected, connectivity, 2022-10-27T09:25:02Z
D, Disconnected, connectivity, 2022-10-27T09:25:02Z
E, Disconnected, connectivity, 2022-10-27T09:25:02Z
A, Connected, connectivity, 2022-10-27T09:30:02Z
B, Connected, connectivity, 2022-10-27T09:30:02Z
C, Disconnected, connectivity, 2022-10-27T09:30:02Z
D, Disconnected, connectivity, 2022-10-27T09:30:02Z
E, Disconnected, connectivity, 2022-10-27T09:30:02Z
A, Connected, connectivity, 2022-10-27T09:35:02Z
B, Connected, connectivity, 2022-10-27T09:35:02Z
C, Disconnected, connectivity, 2022-10-27T09:35:02Z
D, Disconnected, connectivity, 2022-10-27T09:35:02Z
E, Disconnected, connectivity, 2022-10-27T09:35:02Z
A, Connected, connectivity, 2022-10-27T09:48:10Z
I came up with the following SQL, since it's been a while, I was wondering if anyone has some feedback or alternative ideas.
SELECT
COUNT(CASE WHEN status = 'Connected' THEN 1 END) connectedCount,
COUNT(CASE WHEN status = 'Disconnected' THEN 1 END) disconnectedCount, deviceId,
FORMAT(CAST(timestamp AS DATE), 'yyyy-MM-dd') as date
FROM Reporting
WHERE tag = 'connectivity'
GROUP BY deviceId, FORMAT(CAST(timestamp AS DATE), 'yyyy-MM-dd')
ORDER BY date, deviceId