Sloupce ve výsledné sadě select
dotaz pomocí group by
klauzule musí být:
- výraz použitý jako jeden z
group by
kritéria nebo ... - agregační funkce nebo ...
- doslovnou hodnotu
Takže nemůžete udělat to, co chcete, v jediném jednoduchém dotazu. První věc, kterou musíte udělat, je jasně vyjádřit své prohlášení o problému, něco jako:
Dané
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 ) ,
)
První věc, kterou musíte udělat, je určit poslední datum vytvoření pro každou skupinu:
select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
To vám dává výběrová kritéria, která potřebujete (1 řádek na skupinu, se 2 sloupci:group_id a datum vytvoření highwater), abyste splnili 1. část požadavku (výběr jednotlivého řádku z každé skupiny. Musí to být virtuální tabulka v váš poslední select
dotaz:
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
Pokud tabulka není jedinečná podle date_created
v rámci group_id
(AK02), můžete získat duplicitní řádky pro danou skupinu.