我正在寻找SQL来查找列之间的差异,只有到12行,然后求和的差异。例如,这是我的TAB_PAYOUT表。列DIFFERENCE的计算方法是用下一行减去列PAY的值。我的要求是找到第13行的差异,并将差异相加。此表可以有12个以上的行。
这是到目前为止,我已经尝试过,但不知道如何停止计算的差异,在第12行的表
SELECT ID,
SUM(Difference)
FROM ( SELECT ID,
PAY AS PAY,
LAG(PAY,1,0) OVER (ORDER BY ID) previous_row,
LEAD(PAY,1,0) OVER (ORDER BY ID) next_row,
LAG(PAY, 1, 0) OVER (ORDER BY ID) - PAY AS Difference
FROM TAB_PAYOUT
where ID = '000000003502'
order by 1 asc
)
GROUP BY ID
2条答案
按热度按时间sg2wtvxw1#
如果只需要12行,可以使用
ROWNUM
或LIMIT
sdnqo3pr2#
几件事
order by 1 asc
实际上什么都不做。它们都具有相同的排序值,因此顺序不可预测。它可能会在某种顺序插入,但不能保证。要使此操作有意义,您可能需要使用标识列或日期列进行排序。此外,差异之和与组中第一个和最后一个之间的差异没有什么不同。如果你想看到12个条目之间的差异之和,你可以使用LAG返回12,而不是返回1。
如果你只想要12行,那么我猜你可以只添加
LIMIT 12
.在SQL中可能不会尝试。最后,你在末尾有一个GROUP BY ID,但只有一个ID。如果您想扩展此功能以同时查询所有ID,则可能需要一个子查询,这可能非常慢。