Was ist der effizienteste Weg, um die letzte Zeile mit SQL Server zu lesen?
Die Tabelle ist auf einem eindeutigen Schlüssel indiziert - die "unteren" Schlüsselwerte repräsentieren die letzte Zeile.
sql
sql-server
rp.
quelle
quelle
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESC
und sollten die letzten 1000 Datensätze ausgeben.quelle
mykey
ist Ihr Tabellenindexmykey
es sich um eine eindeutige Kennung handelt, würde dieser Ansatz nicht helfenSie benötigen eine Art eindeutig identifizierende Spalte in Ihrer Tabelle, z. B. einen automatisch ausfüllenden Primärschlüssel oder eine Datums- / Uhrzeitspalte (vorzugsweise den Primärschlüssel). Dann können Sie dies tun:
Das
ORDER BY column
weist es an, die Ergebnisse gemäß den Daten dieser Spalte neu anzuordnen, und dasDESC
weist es an, die Ergebnisse umzukehren (wobei das letzte zuerst gesetzt wird). Danach weist dasLIMIT 1
an, nur eine Zeile zurückzugeben.quelle
Wenn einige Ihrer IDs in Ordnung sind, gehe ich davon aus, dass Ihre Datenbank in Ordnung sein wird
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
quelle
Ich denke, dass die folgende Abfrage für SQL Server mit maximaler Leistung ohne sortierbare Spalte funktioniert
Hoffe du hast es verstanden ... :)
quelle
Ich habe versucht, die letzte in SQL-Abfrage in SQL Server 2008 zu verwenden, aber es gibt diesen Fehler: "'last' ist kein anerkannter integrierter Funktionsname."
Also habe ich Folgendes verwendet:
um die ID der letzten Zeile zu erhalten. Man könnte es auch gebrauchen
quelle
Sie können last_value verwenden:
SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
Ich teste es in einer meiner Datenbanken und es hat wie erwartet funktioniert.
Sie können die Dokumentation auch hier überprüfen: https://msdn.microsoft.com/en-us/library/hh231517.aspx
quelle
Versuche dies
quelle
LIMIT
. Dies kehrt zurückIncorrect syntax near LIMIT
Um die letzte Zeile einer Tabelle für die MS SQL-Datenbank 2005 abzurufen, können Sie die folgende Abfrage verwenden:
Hinweis: Um die erste Zeile der Tabelle für die MS SQL-Datenbank 2005 abzurufen, können Sie die folgende Abfrage verwenden:
quelle
select top 1
ohne eine Bestellung von ist kein zuverlässiger Weg, um die erste Aufzeichnung zu erhalten. Wenn Sie keine Bestellung aufgeben, erteilen Sie SQL die Erlaubnis, Ihnen alle gewünschten Datensätze zu geben.OFFSET
undFETCH NEXT
sind eine Funktion von SQL Server 2012, um SQL-Paging beim Anzeigen von Ergebnissen zu erreichen.Das
OFFSET
Argument wird verwendet, um die Startzeile für die Rückgabe von Zeilen aus einem Ergebnis zu bestimmen, und dasFETCH
Argument wird verwendet, um eine Reihe von Zeilen zurückzugeben.quelle
quelle
Auf diese Weise erhalten Sie den letzten Datensatz und aktualisieren ein Feld in Access DB.
AKTUALISIEREN
compalints
SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
quelle
Wenn Sie keine geordnete Spalte haben, können Sie die physische ID jeder Zeile verwenden:
quelle
Wenn Sie eine replizierte Tabelle haben, können Sie in localDatabase eine Identität = 1000 und in der clientDatabase eine Identität = 2000 haben. Wenn Sie also die letzte ID abrufen, finden Sie möglicherweise immer die letzte vom Client, nicht die letzte aus der aktuell verbundenen Datenbank. Die beste Methode, die die zuletzt verbundene Datenbank zurückgibt, ist:
quelle
Nun, ich bekomme nicht den "letzten Wert" in einer Tabelle, sondern den letzten Wert pro Finanzinstrument. Es ist nicht dasselbe, aber ich denke, es ist relevant für einige, die nachsehen möchten, "wie es jetzt gemacht wird". Ich habe auch RowNumber () und CTEs verwendet und davor einfach 1 genommen und nach [column] desc bestellt. aber wir müssen nicht mehr ...
Ich verwende SQL Server 2017, wir zeichnen alle Ticks an allen Börsen weltweit auf, wir haben ~ 12 Milliarden Ticks pro Tag, wir speichern jedes Gebot, jede Nachfrage und jeden Handel, einschließlich der Volumina und Attribute eines Ticks (Bid, Ask, Trade) ) eines der angegebenen Börsen.
Wir haben 253 Arten von Tick-Daten für einen bestimmten Kontrakt (meistens Statistiken) in dieser Tabelle. Der zuletzt gehandelte Preis ist Tick-Typ = 4. Wenn wir also den "letzten" Preis erhalten müssen, den wir verwenden:
Sie können den Ausführungsplan auf meinem Entwicklungssystem sehen, der sehr effizient ausgeführt wird. Er wird in 4 Sekunden ausgeführt, während die Exchange-Import-ETL Daten in die Tabelle pumpt. Es wird einige Sperren geben, die mich verlangsamen. Genau so funktionieren Live-Systeme.
quelle
quelle
Ich bin mir ziemlich sicher, dass es so ist:
Weil ich etwas Ähnliches benutze:
quelle