Im klassischen SQL-92 (nicht die OLAP-Operationen von Quassnoi verwendet verwenden), dann können Sie verwenden:
SELECT g.ID, g.MaxSignal, t.Station, t.OwnerID
FROM (SELECT id, MAX(Signal) AS MaxSignal
FROM t
GROUP BY id) AS g
JOIN t ON g.id = t.id AND g.MaxSignal = t.Signal;
(Ungeprüft Syntax, übernimmt Ihre Tabelle ist 't'.)
Die Unterabfrage in der FROM-Klausel identifiziert den maximalen Signalwert für jede ID; Der Join kombiniert diesen mit der entsprechenden Datenzeile aus der Haupttabelle.
Hinweis: Wenn für eine bestimmte ID mehrere Einträge vorhanden sind, die alle die gleiche Signalstärke haben und die Stärke MAX() ist, erhalten Sie mehrere Ausgabezeilen für diese ID.
Getestet gegen IBM Informix Dynamic Server 11.50.FC3 auf Solaris 10:
+ CREATE TEMP TABLE signal_info
(
id INTEGER NOT NULL,
signal INTEGER NOT NULL,
station CHAR(5) NOT NULL,
ownerid INTEGER NOT NULL
);
+ INSERT INTO signal_info VALUES(111, -120, 'Home', 1);
+ INSERT INTO signal_info VALUES(111, -130, 'Car' , 1);
+ INSERT INTO signal_info VALUES(111, -135, 'Work', 2);
+ INSERT INTO signal_info VALUES(222, -98 , 'Home', 2);
+ INSERT INTO signal_info VALUES(222, -95 , 'Work', 1);
+ INSERT INTO signal_info VALUES(222, -103, 'Work', 2);
+ SELECT g.ID, g.MaxSignal, t.Station, t.OwnerID
FROM (SELECT id, MAX(Signal) AS MaxSignal
FROM signal_info
GROUP BY id) AS g
JOIN signal_info AS t ON g.id = t.id AND g.MaxSignal = t.Signal;
111 -120 Home 1
222 -95 Work 1
ich den Tisch Signal_Info für diesen Test genannt - aber es scheint, die richtige Antwort zu produzieren. Dies zeigt nur, dass mindestens ein DBMS die Notation unterstützt. Allerdings bin ich ein wenig überrascht, dass MS SQL Server nicht - welche Version verwenden Sie?
Es hört nie auf, mich zu überraschen, wie oft SQL Fragen ohne Tabellennamen vorgelegt werden.
Welche Version von SQL Server verwenden Sie? –