sql >> Databáze >  >> RDS >> Sqlserver

Dotaz SQL pro získání maximální hodnoty na základě různé maximální hodnoty dané více záznamů

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

Chcete-li mít přidružené datum, můžete udělat (pozor, to znamená sekvenční 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

Bez sekvenčního id by to bylo:

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 lze vynechat, pokud je zaručeno, že na po_nbr nebudou existovat dvě stejná data skupina.

Indexy na crt_ts a po_nbr pomoci v posledním dotazu, vytvoření jednoho kombinovaného indexu by bylo nejlepší.



  1. Vyberte odlišný sloupec spolu s některými dalšími sloupci v MySQL

  2. aby optimalizátor používal všechny sloupce indexu

  3. Porovnejte řetězce v Oracle

  4. Objeví se arabština v php/mysql ???? otazníky v html