我正在寻找一个SQL-Query来计算两个值之间的差异,如下例所示:
Date | OrderNr | TotalDelivered | -> DeliveredToday
01.08.2016 | 123 | 1000 | -> 1000
01.08.2016 | 456 | 250 | -> 250
01.08.2016 | 789 | 3400 | -> 3400
02.08.2016 | 123 | 1300 | -> 300
02.08.2016 | 456 | 400 | -> 150
02.08.2016 | 789 | 4000 | -> 600
05.08.2016 | 123 | 1300 | -> 0
05.08.2016 | 456 | 500 | -> 100
05.08.2016 | 789 | 4050 | -> 50
因此查询应自动计算" DeliveredToday"每个OrderNr和每天的价值。
这可能吗?
感谢您的帮助
答案 0 :(得分:1)
您可以使用LAG
function访问同一订单的上一行,然后计算差异:
SELECT t.Date,
t.OrderNr,
t.TotalDelivered,
t.TotalDelivered - t.PreviousDelivered as DeliveredToday
FROM
(SELECT
Date,
OrderNr,
TotalDelivered,
LAG(TotalDelivered, 1, 0) OVER (PARTITION BY OrderNr ORDER BY Date ASC) AS PreviousDelivered
FROM tableName
) t
在子查询中,我使用函数LAG
来获取同一订单的TotalDelivered
的先前值(由PARTITION BY OrderNr
指定)并按日期排序(ORDER BY Date ASC
)。然后在外部查询中,我从PreviousDelivered
中减去TotalDelivered
的值,结果是今天交付的数量。
编辑:在评论中提及@SandipPatel时,可能不使用子查询:
SELECT
Date,
OrderNr,
TotalDelivered,
TotalDelivered-LAG(TotalDelivered, 1, 0) OVER (PARTITION BY OrderNr ORDER BY Date ASC) AS PreviousDelivered
FROM tableName