Dans classique SQL-92 (ne pas utiliser les opérations OLAP utilisées par Quassnoi), vous pouvez utiliser:
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;
(syntaxe non cochée, suppose que votre table est 't'.)
La sous-requête de la clause FROM identifie la valeur de signal maximale pour chaque identifiant; la jointure combine cela avec la ligne de données correspondante de la table principale. NB: s'il y a plusieurs entrées pour un ID spécifique qui ont toutes la même intensité de signal et que la force est MAX(), alors vous obtiendrez plusieurs lignes de sortie pour cet ID.
contre IBM Testée Informix Dynamic Server 11.50.FC3 en cours d'exécution sur 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
Je l'ai appelé la table Signal_Info pour ce test - mais il semble produire la bonne réponse. Cela montre seulement qu'il y a au moins un SGBD qui supporte la notation. Cependant, je suis un peu surpris que MS SQL Server ne - quelle version utilisez-vous?
Il ne cesse de me surprendre comment sont soumis souvent des questions SQL sans noms de table.
Quelle version de SQL Server utilisez-vous? –