ある項目が初出した行を求める

命題

以下のようなテーブルで、noが初出した行を求めたい。ここではno:1,2,3の初出は、それぞれid:1,4,5の行という事になる。

 id | no |     dt
----+----+------------
  1 |  1 | 2009-01-01
  2 |  1 | 2009-02-01
  3 |  1 | 2009-03-01
  4 |  2 | 2009-02-01
  5 |  3 | 2009-02-01
  6 |  3 | 2009-04-01
CREATE TABLE t1 ( id serial, no int, dt date );
INSERT INTO t1 ( no, dt ) VALUES ( 1, '2009-01-01' );
INSERT INTO t1 ( no, dt ) VALUES ( 1, '2009-02-01' );
INSERT INTO t1 ( no, dt ) VALUES ( 1, '2009-03-01' );
INSERT INTO t1 ( no, dt ) VALUES ( 2, '2009-02-01' );
INSERT INTO t1 ( no, dt ) VALUES ( 3, '2009-02-01' );
INSERT INTO t1 ( no, dt ) VALUES ( 3, '2009-04-01' );

解法

自己結合したテーブルを相関サブクエリで参照する。

SELECT * FROM t1 x WHERE dt <= (SELECT min(dt) FROM t1 y GROUP BY no HAVING x.no = y.no);
 id | no |     dt
----+----+------------
  1 |  1 | 2009-01-01
  4 |  2 | 2009-02-01
  5 |  3 | 2009-02-01

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2009-09-21 (月) 23:08:41 (3677d)