Antworten:
Wenn Sie MS SQL verwenden, können Sie Folgendes versuchen:
SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESC
und sollten die letzten 1000 Datensätze ausgeben.
select whatever,columns,you,want from mytable
where mykey=(select max(mykey) from mytable);
mykey
ist Ihr Tabellenindex
mykey
es sich um eine eindeutige Kennung handelt, würde dieser Ansatz nicht helfen
Sie 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:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
Das ORDER BY column
weist es an, die Ergebnisse gemäß den Daten dieser Spalte neu anzuordnen, und das DESC
weist es an, die Ergebnisse umzukehren (wobei das letzte zuerst gesetzt wird). Danach weist das LIMIT 1
an, nur eine Zeile zurückzugeben.
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)
Ich denke, dass die folgende Abfrage für SQL Server mit maximaler Leistung ohne sortierbare Spalte funktioniert
SELECT * FROM table
WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1
FROM table)
ID
FROM table)
Hoffe du hast es verstanden ... :)
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:
select max(WorkflowStateStatusId) from WorkflowStateStatus
um die ID der letzten Zeile zu erhalten. Man könnte es auch gebrauchen
Declare @i int
set @i=1
select WorkflowStateStatusId from Workflow.WorkflowStateStatus
where WorkflowStateStatusId not in (select top (
(select count(*) from Workflow.WorkflowStateStatus) - @i ) WorkflowStateStatusId from .WorkflowStateStatus)
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
Versuche dies
SELECT id from comission_fees ORDER BY id DESC LIMIT 1
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:
select top 1 column_name from table_name order by column_name desc;
Hinweis: Um die erste Zeile der Tabelle für die MS SQL-Datenbank 2005 abzurufen, können Sie die folgende Abfrage verwenden:
select top 1 column_name from table_name;
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
und FETCH 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 das FETCH
Argument wird verwendet, um eine Reihe von Zeilen zurückzugeben.
SELECT *
FROM table_name
ORDER BY unique_column desc
OFFSET 0 Row
FETCH NEXT 1 ROW ONLY
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 )
Wenn Sie keine geordnete Spalte haben, können Sie die physische ID jeder Zeile verwenden:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot],
T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
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:
SELECT IDENT_CURRENT('tablename')
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:
select distinct T.contractId,
LAST_VALUE(t.Price)over(partition by t.ContractId order by created ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
from [dbo].[Tick] as T
where T.TickType=4
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.
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)