在两列具有相同值时找到Delta - sql s

2024-10-02 18:14:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为pricechart的sql server表,如下所示:

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

我想以这样的方式填充delta列,如果Price和Id相同,那么我需要卷之间的delta。例如,第4行的Delta应该是20,第5行应该是12,第6行应该是10。 增量是当前卷与具有相同价格和id的前一卷之间的差异

数据在sql server中。 到目前为止我尝试的是: 从sql server获取数据到python。为不同的ID创建单独的字典,然后查找增量。你知道吗

我很确定这不是正确的方法,如果这可以直接在SQLServer上或者在pandas中完成,我需要帮助。你知道吗


Tags: 数据idsqlserver方式serial价格差异
2条回答

您可以使用LAG

SELECT *,
  Volume - LAG(Volume, 1,0) OVER(PARTITION BY Id, Price ORDER BY serial) AS Delta
FROM tab;

SQL表表示无序集。您似乎有一个排序的想法,这个排序需要表示为一列。你知道吗

为了这个特殊的目的,你似乎想要:

select t.*,
       (volume - lag(volume) over partition by price, id order by serial) ) as volum_diff
from t;

?表示指定行顺序的列或表达式。你知道吗

对于没有匹配的“previous”行的行,这将返回NULL。你知道吗

相关问题 更多 >