sql >> Databáze >  >> RDS >> Sqlserver

Vyberte sloupec v SQL, který není ve skupině

Sloupce ve výsledné sadě select dotaz pomocí group by klauzule musí být:

  • výraz použitý jako jeden z group by kritéria nebo ...
  • agregační funkce nebo ...
  • doslovnou hodnotu

Takže nemůžete udělat to, co chcete, v jediném jednoduchém dotazu. První věc, kterou musíte udělat, je jasně vyjádřit své prohlášení o problému, něco jako:

Dané

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

)

První věc, kterou musíte udělat, je určit poslední datum vytvoření pro každou skupinu:

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

To vám dává výběrová kritéria, která potřebujete (1 řádek na skupinu, se 2 sloupci:group_id a datum vytvoření highwater), abyste splnili 1. část požadavku (výběr jednotlivého řádku z každé skupiny. Musí to být virtuální tabulka v váš poslední select dotaz:

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

Pokud tabulka není jedinečná podle date_created v rámci group_id (AK02), můžete získat duplicitní řádky pro danou skupinu.



  1. Třída nemá určenou tabulku nebo název tabulky a nedědí z existující třídy mapované na tabulku

  2. Odlišný LISTAGG, který je v poddotazu v seznamu SELECT

  3. Jak připojit Grails 3.0 k mé místní databázi Mysql

  4. Použití DateDiff() v Oracle