sql >> Databáze >  >> RDS >> Oracle

Oracle SQL dotaz:Získejte nejnovější hodnoty pro skupinu na základě času

Vzhledem k těmto údajům ...

SQL> select * from qtys
  2  /

        ID TS                      QTY
---------- ---------------- ----------
         1 2010-01-04 11:00        152
         2 2010-01-04 11:00        210
         1 2010-01-04 10:45        132
         2 2010-01-04 10:45        318
         4 2010-01-04 10:45        122
         1 2010-01-04 10:30          1
         3 2010-01-04 10:30        214
         2 2010-01-04 10:30       5515
         4 2010-01-04 10:30        210

9 rows selected.

SQL>

... následující dotaz vám dá, co chcete ...

SQL> select x.id
  2         , x.ts as "DATE"
  3         , x.qty as "QUANTITY"
  4  from (
  5      select id
  6             , ts
  7             , rank () over (partition by id order by ts desc) as rnk
  8             , qty
  9      from qtys ) x
 10  where x.rnk = 1
 11  /

        ID DATE               QUANTITY
---------- ---------------- ----------
         1 2010-01-04 11:00        152
         2 2010-01-04 11:00        210
         3 2010-01-04 10:30        214
         4 2010-01-04 10:45        122

SQL>

S ohledem na vaše další požadavky můžete na vnější klauzuli WHERE použít další filtry. Podobně můžete k inline pohledu připojit další tabulky, jako by to byla jakákoli jiná tabulka.



  1. Odeberte propojený server v SQL Server pomocí T-SQL

  2. Optimalizace databáze:Indexy

  3. Nasazení a škálování PostgreSQL v13 s ClusterControl 1.8.2

  4. 12 Doporučené postupy zabezpečení MySQL/MariaDB pro Linux