sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-forespørgsel for at få maksimal værdi baseret på forskellige maksimale værdier givet flere poster

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

For at få den tilknyttede dato kan du gøre (pas på, dette indebærer et sekventielt 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

Uden et sekventielt id ville det være:

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

GROUP BY kan udelades, hvis der med garanti ikke er to lige datoer pr. po_nbr gruppe.

Indekser på crt_ts og po_nbr hjælp i den sidste forespørgsel, ville det være bedst at oprette et kombineret indeks.



  1. Find mandage mellem 2 datoer

  2. MySQL:Indlæser flere filer i en tabel

  3. MySQL:Indsæt post, hvis den ikke findes i tabellen

  4. Eksport af forespørgselsresultater til en fil i farten