Yanor.net/
Wiki
Blog
GitHub
Sandbox
開始行:
* ある項目が初出した行を求める [#d0cbe259]
** 命題 [#cfa25d9a]
以下のようなテーブルで、noが初出した行を求めたい。ここで...
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...
id | no | dt
----+----+------------
1 | 1 | 2009-01-01
4 | 2 | 2009-02-01
5 | 3 | 2009-02-01
終了行:
* ある項目が初出した行を求める [#d0cbe259]
** 命題 [#cfa25d9a]
以下のようなテーブルで、noが初出した行を求めたい。ここで...
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...
id | no | dt
----+----+------------
1 | 1 | 2009-01-01
4 | 2 | 2009-02-01
5 | 3 | 2009-02-01
ページ名: