1
0
This commit is contained in:
Jose
2025-03-12 02:32:51 +01:00

134
README.md
View File

@@ -96,18 +96,18 @@ SELECT
s.sensorType, s.sensorType,
s.unit, s.unit,
s.status AS sensorStatus, s.status AS sensorStatus,
s.timestamp AS sensorTimestamp, wv.temperature,
av.temperature, wv.humidity,
av.humidity, cv.value AS carbonMonoxide,
av.carbonMonoxide,
av.timestamp AS airValuesTimestamp,
gv.lat, gv.lat,
gv.lon, gv.lon,
gv.timestamp AS gpsTimestamp COALESCE(gv.timestamp, wv.timestamp, cv.timestamp) AS timestamp -- el primero no nulo
FROM sensors s FROM sensors s
LEFT JOIN air_values av ON s.sensorId = av.sensorId LEFT JOIN weather_values wv ON s.sensorId = wv.sensorId
LEFT JOIN co_values cv ON s.sensorId = cv.sensorId
LEFT JOIN gps_values gv ON s.sensorId = gv.sensorId; LEFT JOIN gps_values gv ON s.sensorId = gv.sensorId;
CREATE OR REPLACE VIEW v_latest_values AS CREATE OR REPLACE VIEW v_latest_values AS
SELECT SELECT
s.deviceId, s.deviceId,
@@ -116,47 +116,95 @@ SELECT
s.unit, s.unit,
s.status AS sensorStatus, s.status AS sensorStatus,
s.timestamp AS sensorTimestamp, s.timestamp AS sensorTimestamp,
av.temperature, wv.temperature,
av.humidity, wv.humidity,
av.carbonMonoxide, cv.value AS carbonMonoxide,
av.timestamp AS airValuesTimestamp gv.lat,
gv.lon,
COALESCE(gv.timestamp, wv.timestamp, cv.timestamp) AS airValuesTimestamp -- el primero no nulo
FROM sensors s FROM sensors s
LEFT JOIN air_values av LEFT JOIN weather_values wv ON s.sensorId = wv.sensorId
ON s.sensorId = av.sensorId LEFT JOIN co_values cv ON s.sensorId = cv.sensorId
AND av.timestamp = ( LEFT JOIN gps_values gv ON s.sensorId = gv.sensorId
SELECT MAX(timestamp) WHERE (wv.timestamp = (SELECT MAX(timestamp) FROM weather_values WHERE sensorId = s.sensorId)
FROM air_values OR cv.timestamp = (SELECT MAX(timestamp) FROM co_values WHERE sensorId = s.sensorId)
WHERE sensorId = s.sensorId OR gv.timestamp = (SELECT MAX(timestamp) FROM gps_values WHERE sensorId = s.sensorId));
);
CREATE OR REPLACE VIEW v_pollution_map AS
SELECT -- VISTAS AUXILIARES
CREATE OR REPLACE VIEW v_co_by_device AS
SELECT
s.deviceId,
c.value AS carbonMonoxide,
c.timestamp
FROM sensors s
JOIN co_values c ON s.sensorId = c.sensorId
WHERE s.sensorType = 'CO';
CREATE OR REPLACE VIEW v_gps_by_device AS
SELECT
s.deviceId,
g.lat, g.lat,
g.lon, g.lon,
a.carbonMonoxide, g.timestamp
d.deviceId, FROM sensors s
d.deviceName JOIN gps_values g ON s.sensorId = g.sensorId
FROM WHERE s.sensorType = 'GPS';
gps_values g
JOIN
air_values a ON g.sensorId = a.sensorId
JOIN
sensors s ON a.sensorId = s.sensorId
JOIN
devices d ON s.deviceId = d.deviceId
WHERE
(g.sensorId, g.timestamp) IN (
SELECT sensorId, MAX(timestamp)
FROM gps_values
GROUP BY sensorId
)
AND
(a.sensorId, a.timestamp) IN (
SELECT sensorId, MAX(timestamp)
FROM air_values
GROUP BY sensorId
);
CREATE OR REPLACE VIEW v_weather_by_device AS
SELECT
s.deviceId,
w.temperature AS temperature,
w.humidity AS humidity,
w.timestamp
FROM sensors s
JOIN weather_values w ON s.sensorId = w.sensorId
WHERE s.sensorType = 'Temperature & Humidity';
-- VISTAS AUXILIARES
CREATE OR REPLACE VIEW v_pollution_map AS
SELECT
d.deviceId,
d.deviceName,
g.lat,
g.lon,
c.carbonMonoxide,
c.timestamp
FROM devices d
LEFT JOIN v_co_by_device c ON d.deviceId = c.deviceId
LEFT JOIN v_gps_by_device g ON d.deviceId = g.deviceId
AND (g.timestamp <= c.timestamp OR g.timestamp IS NULL)
WHERE c.carbonMonoxide IS NOT NULL
ORDER BY d.deviceId, c.timestamp;
CREATE OR REPLACE VIEW v_sensor_history_by_device AS
SELECT
d.deviceId,
d.deviceName,
w.temperature AS value,
'temperature' AS valueType,
w.timestamp
FROM devices d
JOIN v_weather_by_device w ON d.deviceId = w.deviceId
UNION ALL
SELECT
d.deviceId,
d.deviceName,
w.humidity AS value,
'humidity' AS valueType,
w.timestamp
FROM devices d
JOIN v_weather_by_device w ON d.deviceId = w.deviceId
UNION ALL
SELECT
d.deviceId,
d.deviceName,
c.carbonMonoxide AS value,
'carbonMonoxide' AS valueType,
c.timestamp
FROM devices d
JOIN v_co_by_device c ON d.deviceId = c.deviceId
ORDER BY deviceId, timestamp;
-- Insertar grupos -- Insertar grupos
INSERT INTO groups (groupName) VALUES ('Grupo 1'); INSERT INTO groups (groupName) VALUES ('Grupo 1');