De kolommen in de resultatenset van een select
query met group by
clausule moet zijn:
- een uitdrukking die wordt gebruikt als een van de
group by
criteria , of ... - een aggregatiefunctie , of ...
- een letterlijke waarde
U kunt dus niet doen wat u wilt doen in een enkele, eenvoudige query. Het eerste dat u moet doen, is uw probleemstelling op een duidelijke manier formuleren, zoiets als:
Gegeven
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 ) ,
)
Het eerste dat u moet doen, is de meest recente aanmaakdatum voor elke groep bepalen:
select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
Dat geeft je de selectiecriteria die je nodig hebt (1 rij per groep, met 2 kolommen:group_id en de datum waarop het hoogwater is gemaakt) om aan het eerste deel van de vereiste te voldoen (selecteren van de individuele rij van elke groep. Dat moet een virtuele tabel zijn in je laatste select
vraag:
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
Als de tabel niet uniek is op date_created
binnen group_id
(AK02), je kunt dubbele rijen krijgen voor een bepaalde groep.