###前提・実現したいこと
PostgreSQLを使用しています。
ウィンドウ関数を使うなどして、以下のことを実現させたいです。
testテーブルを読み込み、以下のことをしたいです。
・col1の昇順に並べ替える。
・col2='A',col3='0'のデータがあったら、そのcol1の値を、
次またはそれ以降のレコードが「col3='1'の間のみ」
次またはそれ以降のレコードに編集する。
###データ
元データが「test」テーブル。
testテーブルから抽出したいデータは「test2」テーブルと同内容です。
insert文にコメントが書いてあるレコードについて
testテーブル:処理に関係のある条件が書いてあります
test2テーブル:col4に編集したい内容が書いてあります
-- test1:元データのテーブル create table test( col1 integer, col2 char(1), col3 char(1) ); insert into test values(1,'B','0'); insert into test values(2,'A','0'); -- [1] col2='A',col3='0' insert into test values(3,'B','1'); -- [2] col3='1' insert into test values(4,'B','0'); insert into test values(5,'B','1'); insert into test values(6,'A','0'); -- [3] col2='A',col3='0' insert into test values(7,'C','1'); -- [4] col3='1' insert into test values(8,'C','1'); -- [5] col3='1' insert into test values(9,'D','1'); -- [6] col3='1' insert into test values(10,'B','0'); select * from test order by col1; -- test2:testテーブルから抽出したい内容と同内容のテーブル create table test2( col1 integer, col2 char(1), col3 char(1), col4 integer ); insert into test2 values(1,'B','0',null); insert into test2 values(2,'A','0',null); -- [1] insert into test2 values(3,'B','1',2); -- [2] col4 = [1]のcol1 insert into test2 values(4,'B','0',null); insert into test2 values(5,'B','1',null); insert into test2 values(6,'A','0',null); -- [3] insert into test2 values(7,'C','1',6); -- [4] col4 = [3]のcol1 insert into test2 values(8,'C','1',6); -- [5] col4 = [3]のcol1 insert into test2 values(9,'D','1',6); -- [6] col4 = [3]のcol1 insert into test2 values(10,'B','0',null); select * from test2 order by col1;
試したこと
lag関数を使うなどやってみたのですが、
単純に前のレコードの値が欲しいわけではないので、
できませんでした。
どうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/15 22:59
2017/06/16 12:57