Kolumnerna i resultatuppsättningen av en select
fråga med group by
klausul måste vara:
- ett uttryck som används som ett av
group by
kriterier , eller ... - en aggregerad funktion , eller ...
- ett bokstavligt värde
Så du kan inte göra vad du vill göra i en enda enkel fråga. Det första du ska göra är att ange din problemformulering på ett tydligt sätt, ungefär som:
Givet
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 ) ,
)
Det första du ska göra är att identifiera det senaste skapandedatumet för varje grupp:
select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
Det ger dig de urvalskriterier du behöver (1 rad per grupp, med 2 kolumner:group_id och highwater skapat datum) för att uppfylla den första delen av kravet (välj den individuella raden från varje grupp. Det måste vara en virtuell tabell i ditt sista select
fråga:
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
Om tabellen inte är unik med date_created
inom group_id
(AK02), du kan få dubbletter av rader för en given grupp.