Le colonne nel set di risultati di una select
interrogare con group by
la clausola deve essere:
- un'espressione usata come uno dei
group by
criteri , o ... - una funzione aggregata o ...
- un valore letterale
Quindi, non puoi fare quello che vuoi fare in una singola, semplice query. La prima cosa da fare è dichiarare la tua dichiarazione del problema in modo chiaro, qualcosa del tipo:
Dato
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 ) ,
)
La prima cosa da fare è identificare la data di creazione più recente per ciascun gruppo:
select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
Questo ti dà i criteri di selezione di cui hai bisogno (1 riga per gruppo, con 2 colonne:group_id e data di creazione highwater) per soddisfare la prima parte del requisito (selezionando la singola riga da ciascun gruppo. Deve essere una tabella virtuale in la tua select
finale domanda:
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 la tabella non è univoca per date_created
all'interno di group_id
(AK02), puoi ottenere righe duplicate per un determinato gruppo.