[pgsql-jp: 31175] Re: 複数の入力それぞれの最新の値を求めるSQL 文
gotou
gotou @ hokkou.co.jp
2003年 10月 6日 (月) 16:58:31 JST
ごとうです。
>
> こんにちは。SQL文でいい方法が思いつかず質問です。
>
> 端末が複数あり、それぞれの端末には番号が振ってあるとします。
> DBには、どの端末から、いつ、どんな値が入力されたかを記録する
> ものとします。
>
> create table test_tbl {
> termid int4 ;端末番号
> , dt datetime ;入力時間
> , val int4 ;入力データ
> };
>
> ここから、それぞれの端末の最新データを取りたいと考えました。
> 思いついたのは次の2つ
> 1:入力されるたびに端末ごとの最新のデータだけを保持する
> 別のテーブル(またはファイル)を用意する
> 2:Viewを作って対処
> create view test_view (termid, dtmax)
> as select termid, max(dt) as dtmax from test_tbl
> group by termid;
> 取り出すときは
> select * from test_tbl as tt, test_view as tv
> where tt.termid=tv.termid AND tt.dt=tv.dtmax;
>
> ということで解決しているといえば解決しているのですが、
> 何かもっと簡単に書けるのではないかと思い、MLに投げさせて
> もらいました。
> いい方法がありましたらアドバイスください。
>
>
> --
> __________
> (_ _______()
> __||_[]_||__
> (___________()
> ||‡‡|| 鳥居 大哉 (Hiroya TORII)
> || ||
> ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
>
>
inner文ではいけませんか?
select termid, t1.val from test_tbl as t1 inner join
(select termid, max(dt)as dt from test_tbl group by termid)as t2
using (termid, dt)
な感じのSQLでその端末ごとの最新データが取れませんか?
動作確認はしていないので、正しくはないかもしれませんが。
ちょっと思いついただけなので、はずしていたらごめんなさい。
pgsql-jp メーリングリストの案内