* ある項目が初出した行を求める [#d0cbe259]

** 命題 [#cfa25d9a]
以下のようなテーブルで、noが初出した行を求めたい。ここではno:1,2,3の初出は、それぞれID:1,4,5の行という事になる。
以下のようなテーブルで、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' );

** 解法 [#nb609dc2]
自己結合したテーブルを相関サブクエリで参照する。
 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