sql >> データベース >  >> RDS >> Sqlserver

GroupByではなくSQLで列を選択する

    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)、特定のグループに対して重複する行を取得できます。



    1. マルチレベルカテゴリのデータベース構造(ベストアプローチ)

    2. SQL Serverに監査証跡を実装する最良の方法は?

    3. SQLのUNIONの後のWHEREステートメント?

    4. Spring、Hibernate、Blobの遅延読み込み