Les colonnes du jeu de résultats d'un select
requête avec group by
la clause doit être :
- une expression utilisée comme l'un des
group by
critères , ou ... - une fonction d'agrégation, ou ...
- une valeur littérale
Ainsi, vous ne pouvez pas faire ce que vous voulez faire en une seule requête simple. La première chose à faire est d'énoncer clairement votre énoncé de problème, par exemple :
Donné
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 ) ,
)
La première chose à faire est d'identifier la date de création la plus récente pour chaque groupe :
select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
Cela vous donne les critères de sélection dont vous avez besoin (1 ligne par groupe, avec 2 colonnes :group_id et la date de création highwater) pour remplir la 1ère partie de l'exigence (sélection de la ligne individuelle de chaque groupe. Cela doit être une table virtuelle dans votre select
final requête :
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 table n'est pas unique par date_created
dans group_id
(AK02), vous pouvez obtenir des lignes en double pour un groupe donné.