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

命題

以下のようなテーブルで、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