ホームページ >データベース >mysql チュートリアル >Oracle でタイムスタンプに基づいて各グループの最新の値を取得する方法
時間に基づいて各グループの最新の値を取得します
質問:
次の Oracle テーブルについて考えてみましょう:
<code>id date quantity 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</code>
目標は、ID グループごとに最新の値 (およびそのタイムスタンプ) を取得することです。予期される出力は次のようになります:
<code>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</code>
解決策:
これを行うには、タイムスタンプの降順に基づいて ID グループ内の各行をランク付けするインライン ビューを作成します。
<code class="language-sql">SELECT RANK() OVER (PARTITION BY id ORDER BY ts DESC) AS rnk, id, ts, qty FROM qtys</code>
次に、ランク 1 のレコードをフィルターして最新の値を取得します。
<code class="language-sql">SELECT x.id, x.ts AS "DATE", x.qty AS "QUANTITY" FROM (SELECT * FROM qtys) x WHERE x.rnk = 1</code>
詳細オプション:
<code class="language-sql">WHERE x.ts >= sysdate - INTERVAL 'XX' MINUTE</code>
<code class="language-sql">SELECT x.id || '-' || y.idname AS "ID", x.ts AS "DATE", x.qty AS "QUANTITY" FROM (SELECT * FROM qtys) x LEFT JOIN another_table y ON x.id = y.id</code>
以上がOracle でタイムスタンプに基づいて各グループの最新の値を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。