zahl - sql zeile mit maximalwert




SQL-Wie finde ich die höchste Zahl in einer Spalte? (10)

Du kannst tun

SELECT MAX(ID) FROM Customers;

Nehmen wir an, ich habe die folgenden Daten in der Customers-Tabelle: (mehr nicht)

ID   FirstName   LastName
-------------------------------
20   John        Mackenzie
21   Ted         Green
22   Marcy       Nate

Mit welcher SELECT-Anweisung kann ich die Nummer 22 in der ID-Spalte erhalten?

Ich muss so etwas tun, um eine eindeutige ID zu generieren. Sicher, ich kann das System über Auto-Inkrement ausführen lassen, aber wie bekomme ich dann die automatisch generierte ID?

Ich dachte an "SELECT ID FROM Customers" und an das Zählen der zurückgegebenen Zeilen. Dies scheint jedoch schrecklich ineffektiv zu sein. In diesem Fall wird fälschlicherweise "3" zurückgegeben, obwohl ich eine eindeutige ID von 23 benötige.


Hängt davon ab, welche SQL-Implementierung Sie verwenden. Sowohl MySQL als auch SQLite verfügen beispielsweise über Möglichkeiten, die letzte Einfügungs-ID abzurufen. Wenn Sie PHP verwenden, gibt es sogar eine nette Funktion für genau diese mysql_insert_id ().

Sie sollten wahrscheinlich versuchen, diese MySQL-Funktion zu verwenden, anstatt sich alle Zeilen anzusehen, um nur die größte Einfügungs-ID zu erhalten. Wenn Ihr Tisch groß wird, könnte dies sehr ineffizient werden.


Sie können auch relationale Algebra verwenden. Eine etwas langwierige Prozedur, aber hier ist nur zu verstehen, wie MAX () funktioniert:

E: = π ID (Tabellenname)
E1: = π IDID> = ID ' ((ρ ID' E) ID E)) - π IDID <ID ' ((ρ ID' E) ⋈ E))

Ihre Antwort: Tabellenname ⋈ E1

Grundsätzlich subtrahieren Sie den Satz der geordneten Relation (a, b), in der a < b von A ist, wobei a, b ∈ A ist.

Für Beziehungsalgebrasymbole siehe: Relationale Algebra Von Wikipedia


Um es jederzeit zu erhalten, können Sie SELECT MAX(Id) FROM Customers .

In der Prozedur, in der Sie es hinzufügen, können Sie jedoch auch SCOPE_IDENTITY , um die von dieser Prozedur zuletzt hinzugefügte SCOPE_IDENTITY zu erhalten.
Dies ist sicherer, da Sie Ihre ID - nur dann erhalten, wenn andere gleichzeitig zur Datenbank hinzugefügt werden.


Wenn Sie gerade einen Datensatz in die Customers-Tabelle eingefügt haben und den Wert des Felds mit der zuletzt ausgefüllten ID benötigen, können Sie die Funktion SCOPE_IDENTITY verwenden. Dies ist nur nützlich, wenn INSERT im selben Bereich wie der Aufruf von SCOPE_IDENTITY stattgefunden hat.

INSERT INTO Customers(ID, FirstName, LastName)
Values
(23, 'Bob', 'Smith')

SET @mostRecentId = SCOPE_IDENTITY()

Dies kann für Sie nützlich sein oder nicht, aber es ist eine gute Technik, die Sie beachten sollten. Es funktioniert auch mit automatisch generierten Spalten.


Wenn Sie keine automatisch inkrementierenden Felder verwenden, können Sie ein ähnliches Ergebnis wie folgt erzielen:

insert into Customers (ID, FirstName, LastName)
    select max(ID)+1, 'Barack', 'Obama' from Customers;

Dadurch wird sichergestellt, dass keine Wettlaufsituation besteht, die von einer anderen Person verursacht werden könnte, die zwischen dem Extrahieren der maximalen ID und dem Einfügen des neuen Datensatzes in die Tabelle eingefügt wurde.

Dies ist die Verwendung von Standard-SQL. Es gibt zweifellos bessere Möglichkeiten, dies mit bestimmten DBMS zu erreichen, aber sie sind nicht unbedingt portabel (etwas, das wir in unserem Shop sehr ernst nehmen).


Wenn Sie von MS SQL sprechen, ist hier der effizienteste Weg. Dadurch wird der aktuelle Identitätsstartwert aus einer Tabelle abgerufen, basierend auf der Spalte, die die Identität ist.

select IDENT_CURRENT('TableName') as LastIdentity

Die Verwendung von MAX(id) ist generischer, aber zum Beispiel habe ich eine Tabelle mit 400 Millionen Zeilen, die 2 Minuten braucht, um den MAX(id) . IDENT_CURRENT ist fast augenblicklich ...


SELECT * FROM Customers ORDER BY ID DESC LIMIT 1

Dann holen Sie sich die ID.


select max(id) from Customers 

select max(id) from customers




sql-server