31 lines
1.4 KiB
SQL
31 lines
1.4 KiB
SQL
-- Statistika příjezdů EV (den v týdnu × hodina); plní telemetry_collector při přechodu available → nabíjení.
|
||
|
||
CREATE TABLE ems.ev_arrival_stats (
|
||
id SERIAL PRIMARY KEY,
|
||
site_id INT NOT NULL REFERENCES ems.site(id),
|
||
vehicle_id INT REFERENCES ems.asset_vehicle(id),
|
||
charger_id INT NOT NULL REFERENCES ems.asset_ev_charger(id),
|
||
day_of_week INT NOT NULL,
|
||
arrival_hour INT NOT NULL,
|
||
sample_count INT NOT NULL DEFAULT 0,
|
||
last_updated TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
CONSTRAINT chk_ev_arrival_stats_dow CHECK (day_of_week >= 0 AND day_of_week <= 6),
|
||
CONSTRAINT chk_ev_arrival_stats_hour CHECK (arrival_hour >= 0 AND arrival_hour <= 23),
|
||
UNIQUE (site_id, charger_id, day_of_week, arrival_hour)
|
||
);
|
||
|
||
CREATE INDEX idx_ev_arrival_stats_site_charger
|
||
ON ems.ev_arrival_stats (site_id, charger_id);
|
||
|
||
COMMENT ON TABLE ems.ev_arrival_stats IS
|
||
'Statistika příjezdů EV dle dne v týdnu a hodiny (časová zóna Europe/Prague).
|
||
Plní se z ev_session / telemetrie při detekci připojení (available → preparing/charging).
|
||
Po ~4 týdnech dat lze odhadovat typickou hodinu příjezdu.';
|
||
|
||
-- Nejvýše jedna otevřená session na nabíječku (pro INSERT … ON CONFLICT při startu session).
|
||
CREATE UNIQUE INDEX uidx_ev_session_charger_open
|
||
ON ems.ev_session (charger_id)
|
||
WHERE session_end IS NULL;
|
||
|
||
GRANT SELECT ON ems.ev_arrival_stats TO ems_anon;
|