In der unten stehenden Tabelle, wie bekomme ich nur die jüngste Aufzeichnung von id=1
auf der Grundlage der signin Spalte und nicht alle drei Datensätze?
+----+---------------------+---------+
| 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
anstelle eines explizitenON
. Du hast eine +1 :)SELECT * FROM tbl WHERE id = 1 ORDER BY signin DESC LIMIT 1;
Der offensichtliche Index wäre auf
(id)
, oder ein mehrspaltigen Index auf(id, signin DESC)
.Praktischerweise sortiert MySQL die
NULL
Werte zuletzt in absteigender Reihenfolge. Das ist es, was Sie normalerweise wollen, wenn esNULL
Werte geben kann : die Zeile mit der neuesten Nicht-Nullsignin
.So erhalten Sie
NULL
zuerst Werte:Verbunden:
Der SQL-Standard definiert nicht explizit eine Standardsortierreihenfolge für
NULL
Werte. Das Verhalten ist in verschiedenen RDBMS sehr unterschiedlich. Sehen:Es gibt jedoch die
NULLS FIRST
/NULLS LAST
Klauseln, die im SQL-Standard definiert sind und von den meisten wichtigen RDBMS unterstützt werden, jedoch nicht von MySQL. Sehen:quelle
SELECT TOP 1 *
und entfernen Sie dieLIMIT 1
letzte Zeile. bei Verwendung von SQL Server. Verwenden Sie die oben genannten, wenn MySQL oder Postgres.Aufbauend auf den Antworten von @ xQbert können Sie die Unterabfrage vermeiden UND generisch genug gestalten, um nach einer beliebigen ID zu filtern
SELECT id, signin, signout FROM dTable INNER JOIN( SELECT id, MAX(signin) AS signin FROM dTable GROUP BY id ) AS t1 USING(id, signin)
quelle
Select [insert your fields here] from tablename where signin = (select max(signin) from tablename where ID = 1)
quelle
SELECT * FROM (SELECT * FROM tb1 ORDER BY signin DESC) GROUP BY id;
quelle
Ich hatte ein ähnliches Problem. Mit anderen Worten, ich musste die letzte Version der Seiteninhaltsübersetzung abrufen, um den spezifischen Datensatz mit der höchsten Nummer in der Versionsspalte zu erhalten. Also wähle ich alle nach Version geordneten Datensätze aus und nehme dann die erste Zeile aus dem Ergebnis (unter Verwendung der LIMIT-Klausel).
SELECT * FROM `page_contents_translations` ORDER BY version DESC LIMIT 1
quelle
Einfacher Weg zu erreichen
Ich weiß, es ist eine alte Frage. Sie können auch so etwas tun
SELECT * FROM Table WHERE id=1 ORDER BY signin DESC
Wenn Sie oben abfragen, ist der erste Datensatz der neueste Datensatz.
Für nur einen Datensatz können Sie so etwas wie verwenden
SELECT top(1) * FROM Table WHERE id=1 ORDER BY signin DESC
Die obige Abfrage gibt nur einen letzten Datensatz zurück.
Prost!
quelle