- 締切済み
一つ前のレコードの値と減算して、別テーブルにUPdateする方法について
テーブル1のデータを計算してテーブル2を作成したいと考えております。 計算については"数値"を更新日付の一つ前の値と引き算してその結果をテーブル2に挿入したいと思ってます。 テーブル1 ID 数値 更新日付 001 23 2008/02/23 2:00:00 001 34 2008/02/23 3:00:00 001 50 2008/02/23 4:00:00 001 23 2008/02/23 5:00:00 002 25 2008/02/23 3:00:00 002 50 2008/02/23 4:00:00 002 70 2008/02/23 5:00:00 002 50 2008/02/23 6:00:00 結果 テーブル2 ID 数値 更新日付 001 11 2008/02/23 3:00:00 001 16 2008/02/23 4:00:00 001 -27 2008/02/23 5:00:00 002 25 2008/02/23 4:00:00 002 20 2008/02/23 5:00:00 002 -20 2008/02/23 6:00:00 一応考えたのですが SELECT * FROM テーブル1 AS a, テーブル1 AS b WHERE (((a.ID)=[b].[ID]) AND ((b.更新日付)=(select min(更新日付) from テーブル1 as b where a.更新日付 < b.更新日付))) ORDER BY a.ID, a.更新日付); として、aとbの数値を引き算しようと考えていますが、可能なのでしょうか? ぜんぜん別の方法でもいいので教えていただけないでしょうか? 以上 よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
前の質問を締め切らずに継続する質問をする行為は、「続きの質問」として、ここでは規約違反です。 RDBMS名とバージョンを明示するように求めましたが、なぜ提示がないのでしょう?せっかく具体的なSQLを提示しても、dekinaikunさんの環境では実行できない可能性があります。 >aとbの数値を引き算しようと考えていますが、可能なのでしょうか? 可能かどうかと言われれば、可能です。 しかし、RDBには、「前の行」や「後の行」という概念がないので、利用者側で通番を付けるといった工夫が必要になります。また、そういった操作は、SQLだけでやるより、ストアドプロシジャを使うとか、アプリケーション側でやる方が、シンプルだし性能も出せます。 以下のように、表定義やデータを格納するSQLを貼り付けておくと、アドバイスする側としてもすぐに検索SQLの作成に入れるので、多くの人から早くアドバイスをもらえると思いますよ。 1.表定義例 create table tbl1 (seqno int identity(1,1), id int, 数値 int, 更新日付 datetime); 2.格納データ例 insert into tbl1(id,数値,更新日付) values(1,23,'2008/02/23 2:00:00'); insert into tbl1(id,数値,更新日付) values(1,34,'2008/02/23 3:00:00'); insert into tbl1(id,数値,更新日付) values(1,50,'2008/02/23 4:00:00'); insert into tbl1(id,数値,更新日付) values(1,23,'2008/02/23 5:00:00'); insert into tbl1(id,数値,更新日付) values(2,25,'2008/02/23 3:00:00'); insert into tbl1(id,数値,更新日付) values(2,50,'2008/02/23 4:00:00'); insert into tbl1(id,数値,更新日付) values(2,70,'2008/02/23 5:00:00'); insert into tbl1(id,数値,更新日付) values(2,50,'2008/02/23 6:00:00'); 3.検索例 select x.id, x.数値-(select 数値 from tbl1 where seqno=x.seqno-1) as 数値, x.更新日付 from tbl1 as x where x.seqno>all (select min(seqno) from tbl1 where x.id=id) order by x.id,x.更新日付 ;