sql >> Base de Datos >  >> RDS >> Sqlserver

Seleccione una columna en SQL que no esté en Agrupar por

Las columnas en el conjunto de resultados de un select consulta con group by la cláusula debe ser:

  • una expresión utilizada como una de las group by criterios, o...
  • una función agregada, o...
  • un valor literal

Por lo tanto, no puede hacer lo que quiere hacer en una consulta única y simple. Lo primero que debe hacer es exponer el enunciado de su problema de manera clara, algo como:

Dado

create table dbo.some_claims_table
(
  claim_id     int      not null ,
  group_id     int      not null ,
  date_created datetime not null ,

  constraint some_table_PK primary key ( claim_id                ) ,
  constraint some_table_AK01 unique    ( group_id , claim_id     ) ,
  constraint some_Table_AK02 unique    ( group_id , date_created ) ,

)

Lo primero que debe hacer es identificar la fecha de creación más reciente para cada grupo:

select group_id ,
       date_created = max( date_created )
from dbo.claims_table
group by group_id

Eso le brinda los criterios de selección que necesita (1 fila por grupo, con 2 columnas:group_id y la fecha de creación del nivel alto) para cumplir con la primera parte del requisito (seleccionar la fila individual de cada grupo). Eso debe ser una tabla virtual en tu select final consulta:

select *
from dbo.claims_table t
join ( select group_id ,
       date_created = max( date_created )
       from dbo.claims_table
       group by group_id
      ) x on x.group_id     = t.group_id
         and x.date_created = t.date_created

Si la tabla no es única por date_created dentro de group_id (AK02), puede obtener filas duplicadas para un grupo determinado.