我有一张格式的桌子:
SomeID SomeData
1 3
2 7
3 9
4 10
5 14
6 16
. .
. .
我想在这个表中找出行之间的差额之和。即( (7-3) + (10-9) + (16-14) + ....)
这是最好的方法
发布于 2022-01-04 15:04:39
使用自连接和模数:
SELECT SUM(t1.SomeData - t2.SomeData) AS total_diff
FROM yourTable t1
INNER JOIN yourTable t2
ON t1.SomeID = t2.SomeID + 1
WHERE t1.SomeID % 2 = 0;
这个答案假设SomeID
序列实际上从1开始,在后面的每一行增加1。如果没有,那么我们可能首先可以在SomeID
上应用SomeID
并生成1到N序列。
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY SomeID) rn
FROM yourTable
)
SELECT SUM(t1.SomeData - t2.SomeData) AS total_diff
FROM cte t1
INNER JOIN cte t2
ON t1.SomeID = t2.SomeID + 1
WHERE t1.rn % 2 = 0;
发布于 2022-01-04 15:10:17
您可以尝试使用ROW_NUMBER
窗口函数来生成序列号,然后使用MOD 2得到您期望的组,然后使用条件聚合函数。
查询1
SELECT SUM(CASE WHEN rn = 0 THEN SomeData END) - SUM(CASE WHEN rn = 1 THEN SomeData END)
FROM (
SELECT SomeData,ROW_NUMBER() over(order by SomeID) % 2 rn
FROM t t1
) t1
结果
| |
|---|
| 7 |
https://stackoverflow.com/questions/70580756
复制相似问题