Jak w poniższej tabeli mogę uzyskać tylko najnowszy rekord z id=1
kolumny logowania, a nie wszystkie 3 rekordy?
+----+---------------------+---------+
| id | signin | signout |
+----+---------------------+---------+
| 1 | 2011-12-12 09:27:24 | NULL |
| 1 | 2011-12-13 09:27:31 | NULL |
| 1 | 2011-12-14 09:27:34 | NULL |
| 2 | 2011-12-14 09:28:21 | NULL |
+----+---------------------+---------+
SELECT id, MAX(signin) FROM tbl GROUP BY id WHERE id=1;
USING
zamiast jawnegoON
. Dostałeś +1 :)SELECT * FROM tbl WHERE id = 1 ORDER BY signin DESC LIMIT 1;
Oczywistym wskaźnik będzie na
(id)
, lub indeks wielokolumnowa na(id, signin DESC)
.Dogodnie dla tego przypadku MySQL sortuje ostatnie
NULL
wartości w porządku malejącym. To jest to, czego zazwyczaj potrzebujesz, jeśli mogą istnieć wartości: wiersz z najnowszą wartością niezerową .NULL
signin
Aby
NULL
najpierw uzyskać wartości:Związane z:
Standard SQL nie definiuje jawnie domyślnej kolejności sortowania
NULL
wartości. Zachowanie różni się nieco w różnych systemach RDBMS. Widzieć:Ale nie są to
NULLS FIRST
/NULLS LAST
klauzule zdefiniowane w standardzie SQL i obsługiwane przez większość dużych RDBMS, ale nie przez MySQL. Widzieć:źródło
SELECT TOP 1 *
i usuńLIMIT 1
ostatnią linię. jeśli używasz SQL Server. Użyj powyższego, jeśli MySQL lub Postgres.Opierając się na odpowiedziach @ xQbert, możesz uniknąć podzapytania ORAZ sprawić, że będzie wystarczająco ogólne, aby filtrować według dowolnego identyfikatora
SELECT id, signin, signout FROM dTable INNER JOIN( SELECT id, MAX(signin) AS signin FROM dTable GROUP BY id ) AS t1 USING(id, signin)
źródło
Select [insert your fields here] from tablename where signin = (select max(signin) from tablename where ID = 1)
źródło
SELECT * FROM (SELECT * FROM tb1 ORDER BY signin DESC) GROUP BY id;
źródło
Miałem podobny problem. Musiałem uzyskać ostatnią wersję tłumaczenia zawartości strony, innymi słowy - uzyskać ten konkretny rekord, który ma najwyższą liczbę w kolumnie wersji. Więc wybieram wszystkie rekordy uporządkowane według wersji, a następnie biorę pierwszy wiersz z wyniku (za pomocą klauzuli LIMIT).
SELECT * FROM `page_contents_translations` ORDER BY version DESC LIMIT 1
źródło
Prosty sposób na osiągnięcie
Wiem, że to stare pytanie. Możesz też zrobić coś takiego
SELECT * FROM Table WHERE id=1 ORDER BY signin DESC
W powyższym zapytaniu pierwszy rekord będzie najnowszym rekordem.
Tylko dla jednego rekordu możesz użyć czegoś takiego
SELECT top(1) * FROM Table WHERE id=1 ORDER BY signin DESC
Powyższe zapytanie zwróci tylko jeden najnowszy rekord.
Twoje zdrowie!
źródło