Kolonnerne i resultatsættet af en select
forespørgsel med group by
klausul skal være:
- et udtryk brugt som et af
group by
kriterier , eller ... - en aggregeret funktion , eller ...
- en bogstavelig værdi
Så du kan ikke gøre, hvad du ønsker at gøre i en enkelt, simpel forespørgsel. Det første du skal gøre er at angive din problemformulering på en klar måde, sådan 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 ) ,
)
Den første ting at gøre er at identificere den seneste oprettelsesdato for hver gruppe:
select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
Det giver dig de udvælgelseskriterier, du har brug for (1 række pr. gruppe, med 2 kolonner:group_id og highwater-oprettelsesdatoen) for at opfylde den 1. del af kravet (vælg den individuelle række fra hver gruppe. Det skal være en virtuel tabel i dit sidste select
forespørgsel:
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
Hvis tabellen ikke er unik af date_created
inden for group_id
(AK02), du kan få duplikerede rækker for en given gruppe.