sql >> Databasteknik >  >> RDS >> Sqlserver

Välj en kolumn i SQL inte i Gruppera efter

Kolumnerna i resultatuppsättningen av en select fråga med group by klausul måste vara:

  • ett uttryck som används som ett av group by kriterier , eller ...
  • en aggregerad funktion , eller ...
  • ett bokstavligt värde

Så du kan inte göra vad du vill göra i en enda enkel fråga. Det första du ska göra är att ange din problemformulering på ett tydligt sätt, ungefär som:

Givet

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

)

Det första du ska göra är att identifiera det senaste skapandedatumet för varje grupp:

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

Det ger dig de urvalskriterier du behöver (1 rad per grupp, med 2 kolumner:group_id och highwater skapat datum) för att uppfylla den första delen av kravet (välj den individuella raden från varje grupp. Det måste vara en virtuell tabell i ditt sista select fråga:

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

Om tabellen inte är unik med date_created inom group_id (AK02), du kan få dubbletter av rader för en given grupp.



  1. Få bara kolumnnamn som i array mysql

  2. MySQL 8.0 - Klienten stöder inte autentiseringsprotokoll som begärs av servern; överväg att uppgradera MySQL-klienten

  3. Postgres - Konvertera angränsande lista till kapslade JSON-objekt

  4. Sammanfoga flera rader i enstaka rader i MySQL