1. ホーム
  2. sql

[解決済み] SELECTステートメントで "前の行 "の値にアクセスする方法はありますか?

2022-09-11 14:40:11

質問

テーブルの2行の列の差を計算する必要があります。SQLで直接これを行うことができる方法はありますか?私はMicrosoft SQL Server 2008を使用しています。

私はこのようなものを探しています。

SELECT value - (previous.value) FROM table

変数 "previous"が最新の選択された行を参照することを想像してください。もちろん、そのような選択では、n行のテーブルでn-1行が選択されることになりますが、それはおそらくではなく、実際には私がまさに必要としているものです。

それは何らかの方法で可能ですか?

どのように解決するのですか?

SQL には順序という概念がないので、何らかのカラムで順序を指定する必要があります。このようなものです。

select t1.value - t2.value from table t1, table t2 
where t1.primaryKey = t2.primaryKey - 1

順番を決める方法は知っているが、現在の値から前の値を取得する方法は知らない場合(例えば、アルファベット順に並べたい場合)、標準SQLでそれを行う方法は知りませんが、ほとんどのSQL実装にはそれを行うための拡張機能があります。

SQLサーバーで、各行が区別できるように並べることができる場合、この方法が有効です。

select  rank() OVER (ORDER BY id) as 'Rank', value into temp1 from t

select t1.value - t2.value from temp1 t1, temp1 t2 
where t1.Rank = t2.Rank - 1

drop table temp1

同列を解消する必要がある場合は、ORDER BYに必要なだけのカラムを追加することができます。