sql >> Database teknologi >  >> RDS >> Sqlserver

Vælg en kolonne i SQL ikke i Grupper efter

Kolonnerne i resultatsættet af en select forespørgsel med group by klausul skal være:

  • et udtryk brugt som et af group by kriterier , eller ...
  • en aggregeret funktion , eller ...
  • en bogstavelig værdi

Så du kan ikke gøre, hvad du ønsker at gøre i en enkelt, simpel forespørgsel. Det første du skal gøre er at angive din problemformulering på en klar måde, sådan 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 ) ,

)

Den første ting at gøre er at identificere den seneste oprettelsesdato for hver gruppe:

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

Det giver dig de udvælgelseskriterier, du har brug for (1 række pr. gruppe, med 2 kolonner:group_id og highwater-oprettelsesdatoen) for at opfylde den 1. del af kravet (vælg den individuelle række fra hver gruppe. Det skal være en virtuel tabel i dit sidste select forespørgsel:

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

Hvis tabellen ikke er unik af date_created inden for group_id (AK02), du kan få duplikerede rækker for en given gruppe.



  1. Docker (Apple Silicon/M1 Preview) MySQL intet matchende manifest for linux/arm64/v8 i manifestlisteposterne

  2. Flydende NHibernate DuplicateMappingException med AutoMapping

  3. Hvordan kan jeg helt afinstallere oracle 11g?

  4. Hvordan indsætter man specialtegn i en database?