-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path08_Advanced_Analytics.sql
More file actions
63 lines (59 loc) · 1.69 KB
/
08_Advanced_Analytics.sql
File metadata and controls
63 lines (59 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
USE SmartHomeDB;
GO
-- =============================================
-- 1. CTE (Common Table Expression)
-- =============================================
WITH RoomActivityCounts AS (
SELECT
r.RoomName,
COUNT(sr.ReadingID) AS TotalReadings
FROM Rooms r
JOIN Devices d ON r.RoomID = d.RoomID
JOIN SensorReadings sr ON d.DeviceID = sr.DeviceID
GROUP BY r.RoomName
)
SELECT * FROM RoomActivityCounts
WHERE TotalReadings > 0
ORDER BY TotalReadings DESC;
GO
-- =============================================
-- 2. Window Function (ROW_NUMBER)
-- =============================================
SELECT DeviceName, ReadingValue, Unit, RecordedAt
FROM (
SELECT
d.DeviceName,
sr.ReadingValue,
sr.Unit,
sr.RecordedAt,
ROW_NUMBER() OVER (PARTITION BY d.DeviceID ORDER BY sr.RecordedAt DESC) AS RowNum
FROM Devices d
JOIN SensorReadings sr ON d.DeviceID = sr.DeviceID
) AS RankedReadings
WHERE RowNum = 1;
GO
-- =============================================
-- 3.Subquery, EXISTS
-- =============================================
SELECT DeviceName, RoomName
FROM Devices d
JOIN Rooms r ON d.RoomID = r.RoomID
WHERE NOT EXISTS (
SELECT 1
FROM SensorReadings sr
WHERE sr.DeviceID = d.DeviceID
);
GO
-- =============================================
-- 4. Group By, HAVING
-- =============================================
SELECT
d.DeviceName,
AVG(sr.ReadingValue) AS AvgTemp,
MAX(sr.ReadingValue) AS MaxTemp
FROM SensorReadings sr
JOIN Devices d ON sr.DeviceID = d.DeviceID
WHERE sr.Unit = 'Celsius'
GROUP BY d.DeviceName
HAVING AVG(sr.ReadingValue) > 25.0;
GO