ある項目が初出した行を求める命題以下のようなテーブルで、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 |
|