select
の結果セットの列 group by
を使用したクエリ 句は次のようにする必要があります:
-
group by
の1つとして使用される式 基準、または... - 集計関数、または...
- リテラル値
したがって、1つの単純なクエリでやりたいことを行うことはできません。最初に行うことは、問題の説明を次のように明確に述べることです。
与えられた
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)、特定のグループに対して重複する行を取得できます。