[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 メーリングリストの案内