Kolom dalam kumpulan hasil dari select
kueri dengan group by
klausa harus:
- ekspresi yang digunakan sebagai salah satu dari
group by
kriteria , atau ... - fungsi agregat , atau ...
- nilai literal
Jadi, Anda tidak dapat melakukan apa yang ingin Anda lakukan dalam satu kueri sederhana. Hal pertama yang harus dilakukan adalah menyatakan pernyataan masalah Anda dengan cara yang jelas, seperti:
Diberikan
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 ) ,
)
Hal pertama yang harus dilakukan adalah mengidentifikasi tanggal pembuatan terbaru untuk setiap grup:
select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
Itu memberi Anda kriteria pemilihan yang Anda butuhkan (1 baris per grup, dengan 2 kolom:group_id dan tanggal pembuatan highwater) untuk memenuhi bagian pertama persyaratan (memilih baris individual dari setiap grup. Itu harus berupa tabel virtual di select
terakhir Anda permintaan:
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
Jika tabel tidak unik menurut date_created
dalam group_id
(AK02), Anda bisa mendapatkan baris duplikat untuk grup tertentu.