Die Spalten in der Ergebnismenge eines select
Abfrage mit group by
Klausel muss sein:
- ein Ausdruck, der als einer der
group by
verwendet wird Kriterien , oder ... - eine Aggregatfunktion oder ...
- ein Literalwert
Sie können also nicht mit einer einzigen, einfachen Abfrage tun, was Sie tun möchten. Das erste, was Sie tun müssen, ist, Ihre Problemstellung klar und deutlich zu formulieren, etwa so:
Gegeben
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 ) ,
)
Als erstes müssen Sie das letzte Erstellungsdatum für jede Gruppe ermitteln:
select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
Das gibt Ihnen die Auswahlkriterien, die Sie benötigen (1 Zeile pro Gruppe, mit 2 Spalten:group_id und das Highwater-Erstellungsdatum), um den 1. Teil der Anforderung zu erfüllen (Auswahl der einzelnen Zeile aus jeder Gruppe. Das muss eine virtuelle Tabelle sein). Ihre endgültige select
Abfrage:
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
Wenn die Tabelle durch date_created
nicht eindeutig ist innerhalb von group_id
(AK02), können Sie doppelte Zeilen für eine bestimmte Gruppe erhalten.