Колоните в резултатния набор от select
заявка с group by
клаузата трябва да бъде:
- израз, използван като един от
group by
критерии , или ... - агрегирана функция или ...
- буквална стойност
Така че не можете да направите това, което искате, в една проста заявка. Първото нещо, което трябва да направите, е да заявите проблема си по ясен начин, нещо като:
Дадено
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 ) ,
)
Първото нещо, което трябва да направите, е да определите най-новата дата на създаване за всяка група:
select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
Това ви дава критериите за избор, от които се нуждаете (1 ред на група, с 2 колони:group_id и дата на създаване на пълноводие), за да изпълните първата част от изискването (избиране на отделния ред от всяка група. Това трябва да бъде виртуална таблица в вашият последен select
заявка:
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
Ако таблицата не е уникална по date_created
в рамките на group_id
(AK02), можете да получите дублирани редове за дадена група.