我有一个名为pricechart的sql服务器表,如下所示:
Serial Price Volume Id Delta
1 3.2 280 1121
2 4.6 700 4821
3 1.1 120 5696
4 3.2 300 1121
5 3.2 412 1121
6 1.1 130 5696
我要以这样的方式填写增量列,即如果Price和Id相同,那么我需要量之间的增量。例如,第4行的Delta值应为20,第5行的Delta值应为12,第6行的Delta值应为10。 差异是当前交易量与具有相同价格和ID的先前交易量之间的差。
数据在sql server中。 到目前为止我尝试过的是: 从SQL Server提取数据到python。为不同的ID创建单独的词典,然后找到增量。
我很确定这不是正确的方法,如果可以直接在sql Server或熊猫中完成,则需要帮助。
答案 0 :(得分:3)
您可以使用LAG
:
SELECT *,
Volume - LAG(Volume, 1,0) OVER(PARTITION BY Id, Price ORDER BY serial) AS Delta
FROM tab;
答案 1 :(得分:3)
SQL表表示无序集。您似乎在考虑排序,并且该排序需要用列表示。
出于这个特定目的,您似乎想要滞后:
select t.*,
(volume - lag(volume) over partition by price, id order by serial) ) as volum_diff
from t;
?
用于指定行顺序的列或表达式。
对于没有匹配的“上一个”行的行,它将返回NULL
。