/ / Jak używać odrębnych i limitów razem - mysql

Jak używać odrębnych i limitów razem - mysql

Mam zapytanie mysql. Muszę uzyskać ostatnią wartość z kolumn Lat, Lng z mojej tabeli, ale kolumna numer_seryjny musi być odrębna.

Jak zrobić takie zapytanie?

Jest to potrzebne, ponieważ używam tych współrzędnych, aby załadować je do mapy Google. Więc kiedy mapy Google ładują, muszę mieć znacznik na każdej ostatniej współrzędnej, w której znajduje się pojazd.

Odpowiedzi:

1 dla odpowiedzi № 1
SELECT  m.*
FROM    (
SELECT  DISTINCT serial_number
FROM    mytable
) md
JOIN    mytable m
ON      m.id =
(
SELECT  id
FROM    mytable mi
WHERE   mi.serial_number = md.serial_number
ORDER BY
mi.time DESC, mi.id DESC
LIMIT   1
)

Utwórz indeks na (serial_number, time, id) aby to działało szybko.

Jeśli chcesz pobrać ostatni rekord dla pewnego numeru seryjnego, po prostu użyj tego:

SELECT  *
FROM    mytable
WHERE   serial_number = :my_serial_number
ORDER BY
time DESC, id DESC
LIMIT   1

0 dla odpowiedzi nr 2

1 # Zakładając, że max ID zawsze da ci ostatni lat i lon, zapytanie staje się całkiem proste -

SELECT t2.*
FROM table t2
where t2.id IN
(
SELECT max(t1.id)
FROM table t1
GROUP BY t1.serial_number
)

2 # Jeśli musisz wziąć pod uwagę czas, to tybędzie musiał to zrobić w ten sposób. Tutaj, w zapytaniu wewnętrznym, uzyskuje się max_time każdego numeru_seryjnego. Następnie ten max_time i serial_number są łączone odpowiednio z zewnętrznym czasem tabeli i numerem seryjnym, aby uzyskać odrębne rekordy z ostatnich lat i lon.

SELECT *
FROM table t2,
(
SELECT max(t1.time) max_time, t1.serial_number
FROM table t1
GROUP BY t1.serial_number
) new_table
WHERE t2.time=new_table.max_time
AND t2.serial_number=new_table.serial_number

-1 dla odpowiedzi nr 3

Spróbuj tego

select distinct serial_number, *
from table t
inner join table t1 on t1.serial_number = t.serial_number and t1.id = (select max id from table t2 where t2.serial_number = t1.serial_number)