Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Abfrage zum Abrufen des Maximalwerts basierend auf einem unterschiedlichen Maximalwert bei mehreren Datensätzen

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

Um das zugehörige Datum zu erhalten, könnten Sie Folgendes tun (Vorsicht, dies impliziert eine fortlaufende ID):

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

Ohne fortlaufende ID wäre es:

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

Die GROUP BY kann weggelassen werden, wenn es garantiert keine zwei gleichen Daten pro po_nbr gibt Gruppe.

Indiziert auf crt_ts und po_nbr Hilfe bei der letzten Abfrage, das Erstellen eines kombinierten Index wäre am besten.