As colunas no conjunto de resultados de um
select
consulta com group by
cláusula deve ser:- uma expressão usada como um dos
group by
critérios ou ... - uma função agregada ou ...
- um valor literal
Portanto, você não pode fazer o que deseja em uma única e simples consulta. A primeira coisa a fazer é declarar sua declaração do problema de forma 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 ) ,
)
A primeira coisa a fazer é identificar a data de criação mais recente para cada grupo:
select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
Isso lhe dá os critérios de seleção que você precisa (1 linha por grupo, com 2 colunas:group_id e a data de criação da maré alta) para preencher a 1ª parte do requisito (selecionando a linha individual de cada grupo. Isso precisa ser uma tabela virtual em sua
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
Se a tabela não for exclusiva por
date_created
dentro de group_id
(AK02), você pode obter linhas duplicadas para um determinado grupo.