tablas - SQL-seleccione distinto solo en una columna
sqlserver except (3)
Como no te importa, elegí la ID máxima para cada número.
select tbl.* from tbl
inner join (
select max(id) as maxID, number from tbl group by number) maxID
on maxID.maxID = tbl.id
Explicación de la consulta
select
tbl.* -- give me all the data from the base table (tbl)
from
tbl
inner join ( -- only return rows in tbl which match this subquery
select
max(id) as maxID -- MAX (ie distinct) ID per GROUP BY below
from
tbl
group by
NUMBER -- how to group rows for the MAX aggregation
) maxID
on maxID.maxID = tbl.id -- join condition ie only return rows in tbl
-- whose ID is also a MAX ID for a given NUMBER
Esta pregunta ya tiene una respuesta aquí:
He buscado por todas partes una respuesta a este problema. Estoy usando un servidor SQL de Microsoft, supongo que tengo una tabla que se ve así:
+--------+---------+-------------+-------------+
| ID | NUMBER | COUNTRY | LANG |
+--------+---------+-------------+-------------+
| 1 | 3968 | UK | English |
| 2 | 3968 | Spain | Spanish |
| 3 | 3968 | USA | English |
| 4 | 1234 | Greece | Greek |
| 5 | 1234 | Italy | Italian |
Quiero realizar una consulta que solo selecciona la columna ''NÚMERO'' única (no importa si la primera o la última fila no me molestan). Entonces esto me daría:
+--------+---------+-------------+-------------+
| ID | NUMBER | COUNTRY | LANG |
+--------+---------+-------------+-------------+
| 1 | 3968 | UK | English |
| 4 | 1234 | Greece | Greek |
¿Cómo se puede lograr esto?
Un enfoque muy típico para este tipo de problema es usar row_number()
:
select t.*
from (select t.*,
row_number() over (partition by number order by id) as seqnum
from t
) t
where seqnum = 1;
Esto es más generalizable que usar una comparación con la identificación mínima. Por ejemplo, puede obtener una fila aleatoria usando order by newid()
. Puede seleccionar 2 filas usando where seqnum <= 2
.
Utilizará la siguiente consulta:
SELECT * FROM [table] GROUP BY NUMBER;
Donde [table]
es el nombre de la tabla.
Esto proporciona una lista única para la columna NUMBER
, sin embargo, las otras columnas pueden carecer de sentido según la implementación del proveedor; lo que quiere decir que no pueden corresponder juntas a una fila o filas específicas.