(Nie mówię po angielsku bardzo dobrze, ale postaram się jak mogę)Wybieranie MySQL wartości według datetime
Mam dwie tabele.
tabela1
id carid user --------------------- 1 | A001 | user1 2 | A002 | user1 3 | A003 | user2 4 | A002 | user3
Tabela 2
id carid datetime lat lon ---------------------------------------------------- 1 | A001 | 2013-25-06 10:00:00 | -23.0000 | -46.0000 2 | A002 | 2013-25-06 10:01:00 | -24.3500 | -45.3200 3 | A002 | 2013-25-06 10:02:00 | -24.3800 | -45.3300 4 | A001 | 2013-25-06 10:05:00 | -23.0500 | -46.1000 5 | A003 | 2013-25-06 10:07:00 | -24.3500 | -45.3200 6 | A001 | 2013-25-06 10:10:00 | -23.0700 | -46.1200
muszę wybrać każdy odrębny rejestr "carid" z "user1" zamówionej przez datetime
Wynik muszę:
carid datetime lat lon -------------------------------------------------- A001 | 2013-25-06 10:10:00 | -23.0700 |-46.1200 A002 | 2013-25-06 10:02:00 | -24.3800 |-45.3300
Sposób, w jaki robię, polega na zaznaczeniu wszystkich "karid" od żądanego użytkownika i wybraniu każdego wiersza pojedynczo przez .net.
`SELECT carid FROM table1 where user = “user1”;`
carid ----- A001 A002
Następnie wybierając wiersz chcę:
SELECT * FROM table2 WHERE car_id='A001' ORDER BY datetime DESC limit 1
SELECT * FROM table2 WHERE car_id='A002' ORDER BY datetime DESC limit 1
Ale w zależności od liczby rejestrów „carid” od tego użytkownika muszę zrobić wiele querys. Nie wiem, czy to możliwe, aby to zrobić z pojedynczym SELECT poprawy sposobu robię, ale to, co próbowałem:
SELECT car_id, datetime, lat, lon from table1
INNER JOIN table2 on carid = car_id
WHERE user = 'user1'
GROUP BY carid
ORDER BY datetime DESC;
Wynik:
carid datetime lat lon ------------------------------------------------------ A002 | 2013-25-06 10:01:00 | -24.3500 | -45.3200 A001 | 2013-25-06 10:02:00 | -23.0000 | -46.0000
I ja też próbowałem to:
SELECT car_id, MAX(datetime) as datetime, lat, lon from table1
INNER JOIN table2 on carid = car_id
WHERE user = 'user1'
GROUP BY carid
ORDER BY datetime DESC;
Wynik:
carid datetime lat lon ------------------------------------------------------ A001 | 2013-25-06 10:10:00 | -23.0000 | -46.0000 A002 | 2013-25-06 10:02:00 | -24.3500 | -45.3200
Ale wynik jest błędny. Nie wiem, co zrobić bez wybrania wszystkich wierszy, co jest wolniejsze niż sposób, w jaki naprawdę to robię.
Jakieś myśli?
+1 za dobrze napisane pytanie z danymi tabeli i sposób, w jaki próbujesz rozwiązać swój problem. – Taryn