Kolumny w zestawie wyników select
zapytanie z group by
klauzula musi być:
- wyrażenie używane jako jedno z
group by
kryteria , lub ... - funkcja agregująca lub ...
- wartość dosłowna
Nie możesz więc zrobić tego, co chcesz, w jednym, prostym zapytaniu. Pierwszą rzeczą do zrobienia jest jasne określenie problemu, na przykład:
Przyznane
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 ) ,
)
Pierwszą rzeczą do zrobienia jest określenie najnowszej daty utworzenia każdej grupy:
select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
To daje ci kryteria wyboru, których potrzebujesz (1 wiersz na grupę, z 2 kolumnami:identyfikator_grupy i data utworzenia szczytu), aby spełnić pierwszą część wymagania (wybierając pojedynczy wiersz z każdej grupy. To musi być wirtualna tabela w Twój ostateczny select
zapytanie:
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
Jeśli tabela nie jest unikalna według date_created
w ramach group_id
(AK02), możesz uzyskać zduplikowane wiersze dla danej grupy.