Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapytanie SQL w celu uzyskania maksymalnej wartości na podstawie innej maksymalnej wartości podanej w wielu rekordach

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

Aby mieć powiązaną datę, możesz zrobić (uwaga, oznacza to identyfikator sekwencyjny):

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 identyfikatora sekwencyjnego byłoby to:

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 można pominąć, jeśli nie ma dwóch równych dat na po_nbr grupy.

Indeksy na crt_ts i po_nbr pomoc w ostatnim zapytaniu, najlepiej byłoby utworzyć jeden połączony indeks.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz kopię zapasową pojedynczej tabeli z jej danymi z bazy danych na serwerze sql 2008

  2. Zwróć listę tabel i widoków w SQL Server przy użyciu T-SQL (sp_tables)

  3. Brak węzła tabeli głównej

  4. Jak określić wartość pola, której nie można przekonwertować na (dziesiętne, zmiennoprzecinkowe, int) w SQL Server?

  5. Muszę usunąć wiodące zera po przecinku