CTEや派生テーブルなどを利用せずにウィンドウ関数を使用して移動パーセンタイルを取得するより良い方法はありますか?私は窓関数を利用して1つのクエリにすべてを収めたいと思っていましたが、それをパーセンタイル値に変換する時間がありました。私が考えることができる唯一の解決策は、数値を作成し、テーブルで数学を行うことでした。これを行うもっと合理化された方法があったらちょうど涼しいであろうか?パーセンタイルの決定ラグ、リード、および現在の行との差は、ウィンドウ関数を使用して計算されますか?
WITH numberdata AS
(
SELECT
custid
,orderid
,LAG(VAL) OVER(PARTITION BY CUSTID ORDER BY ORDERID DESC) as lagval
,LEAD(VAL) OVER(PARTITION BY CUSTID ORDER BY ORDERID DESC) as leadval
,val - LAG(VAL) OVER(PARTITION BY CUSTID ORDER BY ORDERID DESC) as lagvaldiff
,val - LEAD(VAL) OVER(PARTITION BY CUSTID ORDER BY ORDERID DESC) as leadvaldiff
,val
FROM sales.ordervalues
)
select
CAST((lagval)/val AS NUMERIC(10,2)) as lagpctdiff
,CAST((leadval)/val AS NUMERIC(10,2)) as leadpctdiff
,CAST((lagvaldiff)/leadvaldiff AS NUMERIC(10,2)) as pctdiff
,val
,lagval
from numberdata
order by custid desc
これは、私がテストの準備でコードについて学ぶために勉強しているところです。データは、トレーニングdb TSQL_2012にあるsales.ordervaluesテーブルから取得されます。
CTE内に配置することなく、leadvaldiff列とlagvaldiff列をパーセンテージに変換するにはどうすればよいですか?
おそらく、小さなデータサンプルを提供できますか? また、今では、あるレコードの値を次のレコードと前のレコードの値と比較しています。それはあなたが達成したい、そしてなぜですか? – dybzon
はい、サンプルデータセットと、結果がどのように見えるかのサンプルを提供してください。 –
[dataset](https://docs.google.com/spreadsheets/d/1991QZ8pzoZmfIxJcHv21Cm52Z-k0joerw7jngRYMwCQ/edit?usp=sharing)ご覧いただきありがとうございます! – Zeluvius