sql >> Database >  >> RDS >> Sqlserver

Selecteer een kolom in SQL niet in Group By

De kolommen in de resultatenset van een select query met group by clausule moet zijn:

  • een uitdrukking die wordt gebruikt als een van de group by criteria , of ...
  • een aggregatiefunctie , of ...
  • een letterlijke waarde

U kunt dus niet doen wat u wilt doen in een enkele, eenvoudige query. Het eerste dat u moet doen, is uw probleemstelling op een duidelijke manier formuleren, zoiets als:

Gegeven

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 ) ,

)

Het eerste dat u moet doen, is de meest recente aanmaakdatum voor elke groep bepalen:

select group_id ,
       date_created = max( date_created )
from dbo.claims_table
group by group_id

Dat geeft je de selectiecriteria die je nodig hebt (1 rij per groep, met 2 kolommen:group_id en de datum waarop het hoogwater is gemaakt) om aan het eerste deel van de vereiste te voldoen (selecteren van de individuele rij van elke groep. Dat moet een virtuele tabel zijn in je laatste select vraag:

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

Als de tabel niet uniek is op date_created binnen group_id (AK02), je kunt dubbele rijen krijgen voor een bepaalde groep.



  1. SQL Server Collection Inventory Script -2

  2. UTF-8-strings in een MySQL-database zijn in de war geraakt na configuratiewijziging

  3. MySQL - Kolom hernoemen

  4. Waarom zelfs *DB.exec() of voorbereide instructies in Golang gebruiken?