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
|
-- 14% du lot
SELECT m1.iddevice, m1.longitude, m1.latitude
FROM markers m1
LEFT OUTER JOIN markers m2 ON m2.iddevice = m1.iddevice AND m2.id > m1.id
WHERE m2.iddevice IS NULL;
-- 13% du lot
SELECT m1.iddevice, m1.longitude, m1.latitude
FROM markers m1
WHERE NOT EXISTS(
SELECT 1
FROM markers m2
WHERE m2.iddevice = m1.iddevice
AND m2.id > m1.id
);
-- 33% du lot
SELECT m.longitude , m.iddevice , m.latitude
FROM markers m , ( SELECT max(id) id,iddevice FROM markers GROUP BY iddevice ) m_v
WHERE m.id = m_v.id;
-- 14% du lot
SELECT m1.iddevice, m1.longitude, m1.latitude
FROM markers m1
LEFT OUTER JOIN markers m2 ON m2.iddevice = m1.iddevice AND m2.id > m1.id
GROUP BY m1.id, m1.iddevice, m1.longitude, m1.latitude
HAVING count(m2.id) = 0;
-- 27% du lot
with t (iddevice, longitude, latitude, rang)
as
(
SELECT m1.iddevice, m1.longitude, m1.latitude, rank() over(partition by m1.iddevice order by m1.id desc)
FROM markers m1
)
select iddevice, longitude, latitude
from t
where rang = 1; |
Partager