SQLについてのしつもんです。

キーが連続しないレコードで、前後を比較したいときはどのようなSQL文をかけばいいでしょうか?
複雑なSQLのワンピースなので、カーソルでとかレコードセットをうけとってとかをしないで、
SQL一発の発行で計算させたいです。


ex.
>||
CREATE TABLE IF NOT EXISTS test_tbl (
key_cd int(11) default 0,
value int(11) default 0,
PRIMARY KEY (key_ymd)
)TYPE=MyISAM;

insert into test_tbl(key_cd,value)values(1,10);
insert into test_tbl(key_cd,value)values(2,20);
insert into test_tbl(key_cd,value)values(3,43);
insert into test_tbl(key_cd,value)values(10,80);
insert into test_tbl(key_cd,value)values(30,165);

key_cd | value
1 |10
2 |20
3 |43
10 |80
30 |165
||<


こんなふうに次のkey_cdのvalueとの差分をとりたいです。
>||
key_cd | value | answer
1 |10 | 10
2 |20 | 23
3 |43 | 40
10 |80 | 85
30 |165 | --
||<

サブクエリ使用可。mySQL5.0で。rownumは使用不可でっす。レッツトライ。('Å゜)b

回答の条件
  • 1人2回まで
  • 登録:2006/04/23 19:13:03
  • 終了:2006/04/23 21:00:08

ベストアンサー

id:Sampo No.1

Sampo回答回数556ベストアンサー獲得回数1042006/04/23 19:55:33

ポイント60pt

select

  t1.key_cd, t1.value, t2.value-t1.value

from

  test_tbl as t1, test_tbl as t2

where

  t2.key_cd=(select min(t3.key_cd) from test_tbl as t3 where t3.key_cd>t1.key_cd)

どうぞ。

(全角スペースで整形してあるので、コピペしただけではゴミが混じります)

id:kuippa

おー、そうかminか。

maxで考えてたんで、ごちゃごちゃになっちゃってました。やっぱり簡単なことでしたね(ーωー|||)

嵌ると思いつかないもので…

ありがとうございましたーー

質問文のSQLやらなにやら、そここにまちがってましたね。ごめんなさい。

2006/04/23 20:59:35

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません