Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Selecione uma coluna no SQL não em Group By


As colunas no conjunto de resultados de um select consulta com group by cláusula deve ser:
  • uma expressão usada como um dos group by critérios ou ...
  • uma função agregada ou ...
  • um valor literal

Portanto, você não pode fazer o que deseja em uma única e simples consulta. A primeira coisa a fazer é declarar sua declaração do problema de forma clara, algo como:

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

)

A primeira coisa a fazer é identificar a data de criação mais recente para cada grupo:
select group_id ,
       date_created = max( date_created )
from dbo.claims_table
group by group_id

Isso lhe dá os critérios de seleção que você precisa (1 linha por grupo, com 2 colunas:group_id e a data de criação da maré alta) para preencher a 1ª parte do requisito (selecionando a linha individual de cada grupo. Isso precisa ser uma tabela virtual em sua select final consulta:
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

Se a tabela não for exclusiva por date_created dentro de group_id (AK02), você pode obter linhas duplicadas para um determinado grupo.