我想通過ID查找在同一列組兩行之間的差異之間的差異如何獲得兩行
ID Value1 Value2
a 500 200
b 300 200
a 100 300
b 300 400
....
預計輸出
ID Value1 Value2
a 400 -100
b 0 -200
....
如何使該查詢以上條件。
我想通過ID查找在同一列組兩行之間的差異之間的差異如何獲得兩行
ID Value1 Value2
a 500 200
b 300 200
a 100 300
b 300 400
....
預計輸出
ID Value1 Value2
a 400 -100
b 0 -200
....
如何使該查詢以上條件。
您可以使用下面:
SELECT
ID,
MAX(Value1) - MIN(Value1),
MIN(Value2) - MAX(Value2)
FROM
myTableName
GROUP BY
ID
但有一個假設:第二行有始終大於Value1
比第一個低Value2
。
如果其中一個ID只包含1行,該怎麼辦?那麼不同的是0。我認爲這是錯誤的。 –
你可以試試:
SELECT t1.ID, max(t2.VALUE1 - t1.VALUE1)
FROM TABLE1 t1
left join TABLE1 t2 on t1.id = t2.id
group by t1.id
如果其中一個ID只包含1行,該怎麼辦?那麼不同的是0。我認爲這是錯誤的。 –
這個查詢將給ID的最大值和相同ID的最小值之間的絕對差值:
SELECT ID
, ABS(MAX(VALUE1) - MIN(VALUE1)) AS v1Diff
, ABS(MAX(VALUE2) - MIN(VALUE2)) AS v2Diff
FROM TABLE1
GROUP BY ID
但是,如果你想得到一個真正的差異(消極dif f)那麼我們需要知道哪一行是第一行,哪一行是下一行。然後我們可以計算差值,如firstRowValue - nextRowValue
。
也許您的表格有一些RowID
或DateTime
列,我們可以從中訂購相同的行ID
。 你的表格中有哪些列/列是Primery Key
?與CTE和ROW_NUMBER(
使用選項)排序函數
;WITH cte AS
(
SELECT ID,
CASE ROW_NUMBER() OVER(PARTITION BY ID ORDER BY 1/0) % 2
WHEN 1 THEN Value1
WHEN 0 THEN -1 * Value1 END AS Value1,
CASE ROW_NUMBER() OVER(PARTITION BY ID ORDER BY 1/0) % 2
WHEN 1 THEN Value2
WHEN 0 THEN -1 * Value2 END AS Value2
FROM dbo.test22
)
SELECT ID, SUM(Value1) AS Value1, SUM(Value2) AS Value2
FROM cte
GROUP BY ID
演示上SQLFiddle
有多少行是每個'ID'價值?如果每個「ID」值有3行或更多行,您如何計算這種差異? –