63 lines
1.3 KiB
Plaintext
63 lines
1.3 KiB
Plaintext
WITH jam_data AS (
|
||
/* TRUE JAM COUNTS PER DEVICE */
|
||
SELECT
|
||
Name,
|
||
COUNT(*) AS Jam_count
|
||
FROM
|
||
(
|
||
/* AREA JAMS */
|
||
SELECT
|
||
Name,
|
||
t_stamp
|
||
FROM jam_area
|
||
WHERE t_stamp BETWEEN :starttime AND :endtime
|
||
|
||
UNION ALL
|
||
|
||
/* DEVICE JAMS – EDGE DETECT */
|
||
SELECT
|
||
Name,
|
||
t_stamp
|
||
FROM
|
||
(
|
||
SELECT
|
||
Name,
|
||
t_stamp,
|
||
Jam,
|
||
IF(@lastName = Name, @prevJam, 0) AS prevJam,
|
||
@prevJam := Jam,
|
||
@lastName := Name
|
||
FROM lane_data
|
||
JOIN (SELECT @prevJam := 0, @lastName := '') AS vars
|
||
WHERE t_stamp BETWEEN :starttime AND :endtime
|
||
ORDER BY Name, t_stamp
|
||
) AS x
|
||
WHERE Jam = 1 AND prevJam = 0
|
||
) all_jams
|
||
GROUP BY Name
|
||
),
|
||
|
||
total AS (
|
||
SELECT SUM(Jam_count) AS Total_jams
|
||
FROM jam_data
|
||
)
|
||
|
||
SELECT
|
||
jd.Name,
|
||
ROUND((jd.Jam_count / t.Total_jams) * 100, 2) AS Jam_percentage
|
||
FROM jam_data jd
|
||
JOIN total t
|
||
WHERE t.Total_jams > 0
|
||
|
||
UNION ALL
|
||
|
||
/* FALLBACK IF NOTHING EXISTS */
|
||
SELECT
|
||
'N/A' AS Name,
|
||
0 AS Jam_percentage
|
||
WHERE NOT EXISTS (
|
||
SELECT 1 FROM jam_data
|
||
)
|
||
|
||
ORDER BY Jam_percentage DESC;
|