sql >> Database >  >> RDS >> Sqlserver

SQL-query om maximale waarde te krijgen op basis van verschillende maximale waarde bij meerdere records

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

Om de bijbehorende datum te hebben, zou je kunnen doen (pas op, dit impliceert een sequentiële 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

Zonder een sequentiële id zou het zijn:

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

De GROUP BY kan worden weggelaten als er gegarandeerd geen twee gelijke datums zijn per po_nbr groep.

Indexen op crt_ts en po_nbr hulp bij de laatste zoekopdracht, het maken van één gecombineerde index zou het beste zijn.



  1. BREAK-instructie in PL/pgSQL

  2. Hoe meerdere vergelijkbare databases te doorzoeken met Peewee?

  3. Naam van de momenteel uitgevoerde procedure binnen het pakket

  4. Datum ontleden met verschillende tijdzones