同じ列の値を減算したい場合、この減算は非常に次の行で行う必要があります。次の行の列の値を減算する方法SQLサーバー
iは、行1、行2及びレコードを減算したいように (ROW2 X - ROW1 x)の
同じ列の値を減算したい場合、この減算は非常に次の行で行う必要があります。次の行の列の値を減算する方法SQLサーバー
iは、行1、行2及びレコードを減算したいように (ROW2 X - ROW1 x)の
ANSI
標準OLAP
の機能を使用して、目的の結果を得ることができます。
SELECT x,
min(x) over(
ORDER BY id ROWS BETWEEN 1 following AND 1 following) - x AS RESULT
FROM table1;
上記のクエリは、行n + 1
およびディスプレイからid
及び減算行n
によって結果をソート列と共に結果とともにn
サンプルデータをもたらす:
x RESULT
-----------------------------------
318963.0000000000 -95.9999999990
318867.0000000010 -128.0000000000
318739.0000000010 128.0000000000
318867.0000000010 NULL
あなたがあなたのテーブルに参加autoにあなたのテーブルの上にIDが必要になります。あなたがIDをお持ちでない場合は、order clause
それを決定するために、
select
A.*,
B.*,
B.X-A.X as DELTA
from
theTable A inner theTable B on
A.ID+1=B.ID
where
A.ID % 2 = 1
EDIT:
with order_table (
select
ROW_NUMBER()
OVER (order by ???) as ID,
*
from
theTable
)
select
A.*,
B.*,
B.X-A.X as DELTA
from
order_table A inner order_table B on
A.ID+1=B.ID
where
A.ID % 2 = 1
replace `???` by your criteria.
使用剰余演算子は、別名Aに別名Bを有する第二の部分を半分部分を選択します警告:SQLテーブル内のデータは注文されません。あなたイースリーIDまたはTimesstampなどの特定の列なしで挿入順序を保持することはできません...
あなたはLEADを使用することができます。
SELECT x
,lead(x, 1, 0) OVER (ORDER BY id) - x
From myTable;
あなたが行を注文する必要があります。上記の例では、私はこれをID
で行っていますが、あなたは何でも持っています。
ここでは他の動的な方法は、row_number
の助けを借りてCTE
の機能を使用して各行にランキングを割り当てます。
;WITH CTE AS
(
SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) RN FROM <table_name>
),
CTE1 AS
(
SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) RN FROM <table_name>
)
SELECT C1.X - C.X [x] FROM CTE C
INNER JOIN CTE1 C1 ON C1.RN = C.RN+1
説明:CTE
はあなたのすべてのレコードを取得し、それぞれの固有のエントリの行番号を適用します。追加のエントリごとに増分する番号が付けられます。
という名前のユニークな列があります。警告! https://stackoverflow.com/questions/4810627/sql-server-2005-row-number-without-order-by – Indent
注文はありますか?言い換えれば、行の順序を指定する属性がありますか? –
はい、ID番号 –