人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: くいっぱ
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:23 EX Key MyISAM SQL
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Sampo
●60ポイント ベストアンサー

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)

どうぞ。

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

◎質問者からの返答

おー、そうかminか。

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ