En el clásico de SQL-92 (no usar las operaciones OLAP utilizados por Quassnoi), entonces usted puede utilizar:
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;
(sintaxis sin control; asume su mesa es 't'.)
La subconsulta en la cláusula FROM identifica el valor máximo de la señal para cada identificación; la unión combina eso con la fila de datos correspondiente de la tabla principal.
NB: si hay varias entradas para una ID específica que tienen la misma intensidad de señal y que la intensidad es MAX(), obtendrá varias filas de salida para esa ID.
probado contra IBM Informix Dynamic Server 11.50.FC3 que se ejecutan en 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
me llamaba la tabla Signal_Info para esta prueba - pero parece que para producir la respuesta correcta. Esto solo muestra que hay al menos un DBMS que admite la notación. Sin embargo, estoy un poco sorprendido de que MS SQL Server no lo haga, ¿qué versión estás usando?
Nunca deja de sorprenderme la frecuencia con preguntas SQL se sometió sin nombres de tabla.
¿Qué versión de SQL Server estás usando? –