いつもお世話になっております。
以下のような表からそれぞれのKEY_IDごとにその日の最新のVALUE値を取得する方法を模索しております。
【テーブル構成】
create table sample_log ( key_id integer not null, time timestamp(6) with time zone not null, value numeric, primary key (mid,sampled_at) ); INSERT INTO sample_log VALUES(1,'2020/3/1 10:01:12',24)); INSERT INTO sample_log VALUES(1,'2020/3/1 10:01:13',25)); INSERT INTO sample_log VALUES(1,'2020/3/1 10:01:14',26)); INSERT INTO sample_log VALUES(2,'2020/3/1 10:01:12',24)); INSERT INTO sample_log VALUES(2,'2020/3/1 10:01:13',25)); INSERT INTO sample_log VALUES(2,'2020/3/1 10:01:14',26)); INSERT INTO sample_log VALUES(3,'2020/3/1 10:01:12',24)); INSERT INTO sample_log VALUES(3,'2020/3/1 10:01:13',25)); INSERT INTO sample_log VALUES(3,'2020/3/1 10:01:14',26));
【期待結果】
| key_id | time | value |
|---|---|---|
| 1 | 2020/3/1 10:01:14 | 26 |
| 2 | 2020/3/1 10:01:14 | 26 |
| 3 | 2020/3/1 10:01:14 | 26 |
【試したSQL】
SELECT * FROM sample_log WHERE key_id IN(1,2,3) ORDER BY time '2020/03/01 00:00:00' AND '2020/03/1 23:59:59' DESC LIMIT 1
上記のSQLではIN句の中から最新のデータを取るという意味合いになってしまい
1レコードしか取得できませんでした。
実現したいのは期待結果のようなそれぞれのkey_idごとにその日の最新値を取得する方法です。
至らない点も多いかと思いますが、ご教授いただけますでしょうか。
質問のテーブル定義はCREATE TABLEで、テーブルに存在するデータのINSERTに修正した方が適切なコメントが付き易いです。
[PL/SQL]はOracle Database 専用ですから、削っては?
前回の質問は二年間放置し、今日になってベストアンサーを決めました。ベストアンサーは問題のある回答で、これで解決したとは思えません。この質問をする事になって、読み返しもせず決めたものと思われます。
失礼、前回ではなくこの質問者の最初の質問の話でした。つまり全部未解決で放置していたようです。
>>Orlofsky様
ご指摘ありがとうございます。
上記2点を対応いたしました、また、過去ログのリンクありがとうございます。
なんとか命令の意味を調べて解決できそうな気がします。
>>Zuishin様
質問をするためにつけたのではなく、2年ぶりにログインした所
画面右上の通知を見て該当の質問、2件にベストアンサーをつけていなかったことの気づき
慌ててベストアンサーをつけました。以後、気をつけます。
回答2件
あなたの回答
tips
プレビュー