两列具有相同值时查找Delta-SQL Server

时间:2018-10-13 13:22:02

标签: python sql sql-server pandas

我有一个名为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或熊猫中完成,则需要帮助。

2 个答案:

答案 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