- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- PostgreSQL/SQL/相関サブクエリ/ある項目が初出した行を求める1 へ行く。
- 1 (2009-09-21 (月) 23:08:12)
ある項目が初出した行を求める
命題
以下のようなテーブルで、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