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.