sql >> データベース >  >> RDS >> Oracle

Oracle SQLクエリ:時間に基づいてグループごとに最新の値を取得します

    このデータを考えると...

    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>
    

    ...次のクエリはあなたが望むものを与えます...

    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>
    

    追加の要件に関しては、外側のWHERE句に追加のフィルターを適用できます。同様に、他のテーブルと同じように、追加のテーブルをインラインビューに結合できます。



    1. SQLServerの複雑さを軽減するためのヒント

    2. MySQLのnow()+1日

    3. MySQL5.7からMySQL8にアップグレードするためのヒント

    4. SQLServerの既存の列にIDプロパティを追加するにはどうすればよいですか