Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête SQL pour obtenir la valeur maximale en fonction de différentes valeurs maximales en fonction de plusieurs enregistrements

SELECT
  MAX(id) id,
  po_nbr
FROM
  temp
GROUP BY
  po_nbr

Pour avoir la date associée, vous pourriez faire (attention, cela implique un identifiant séquentiel) :

SELECT
  temp.id,
  temp.po_nbr,
  temp.crt_ts
FROM
  temp
  INNER JOIN (
    SELECT MAX(id) id FROM temp GROUP BY po_nbr
  ) latest ON latest.id = temp.id

Sans identifiant séquentiel, ce serait :

SELECT
  MAX(temp.id) id,
  temp.po_nbr,
  temp.crt_ts
FROM
  temp INNER JOIN (
    SELECT   MAX(crt_ts) crt_ts, po_nbr 
    FROM     temp i
    GROUP BY po_nbr
  ) latest ON latest.crt_ts = temp.crt_ts AND latest.po_nbr = temp.po_nbr
GROUP BY
  temp.po_nbr,
  temp.crt_ts

Le GROUP BY peut être omis s'il est garanti qu'il n'y aura pas deux dates égales par po_nbr groupe.

Index sur crt_ts et po_nbr help dans la dernière requête, il serait préférable de créer un index combiné.