如果满足特定条件,则同一列的行之间的差异

乔乔

我试图创建一个新列Diff,其中包含名为的同一列的不同行之间的差异Rep,这是一个整数。

我的表如下所示:

------------------------
security_ID | Date | Rep 
------------------------
2256        |202001|  0
2257        |202002|  1
2258        |202003|  2
2256        |202002|  3
2256        |202003|  5

对于一个特定的security_ID我想得到的差异是,Rep如果Date它们是整数,则相差1(例如202002-202001 = 1)。例如,我希望输出为:

-------------------------------
security_ID | Date | Rep | Diff
-------------------------------
2256        |202001|  0  |  0
2257        |202002|  1  |  1 
2258        |202003|  2  |  2 
2256        |202002|  3  |  3 
2256        |202003|  5  |  2

最后一行是Diff2,因为Date对于security_ID2256 计算将为5-3(分别针对202003和202002)

编辑:因为Sybase没有,LAG()我尝试了以下操作:

SELECT security_ID, Date, Rep, 
MIN(Rep) OVER (PARTITION BY Date, security_ID rows between current row and 1 following) - Rep as "Diff"
from
my_table 

但这并没有给我正确的答案。例如,Diff根据上述情况,上面的最后一行和倒数第二行的差为0。

谢谢

苏uji

假设date列始终按升序排列,我们可以将其left join与self一起使用,并带入先前的rep值,然后在外部计算差异。如,

select security_id,dt,rep,(rep-prev_rep) diff
  from
(
select t1.security_id,t1.dt,t1.rep,
       coalesce(t2.rep,0) prev_rep
  from mytable t1
  left join mytable t2
    on t1.security_id = t2.security_id
   and t2.dt = t1.dt - 1
)
order by rep;

编辑:解决OP的查询尝试

如果可以使用显示的窗口功能,则可以按以下方式修改查询,

select security_id
     , dt
     , rep
     , (rep-coalesce(max(rep) over (partition by security_id order by dt rows between unbounded preceding and 1 preceding),0)) diff
from mytable;
order by rep

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在同一列中找到符合特定条件的单元格之间的差异

如果单独的列不满足特定条件,则选择一列的值

如果两列满足特定条件,则 SQL 返回行

查询更新无条件的第一列,仅在满足特定条件时更新另一列

SQL:如果满足条件,则将值从列复制到同一列中的另一行

如何计算满足R中特定条件的每一列的行数

如何使用NA找出至少一列是否满足特定条件

如果一组特定列中的值满足特定条件,则返回整行

在 Python 中满足特定条件的行之间选择行

如果根据数据帧的行和列值满足特定条件,如何获取列标题?

计算Spotfire中特定行的同一列的差异

在SAS中,如果满足特定条件,如何停止标记一组行?

在满足特定条件的熊猫行之间进行简单的计算

R - 使用特定条件将列值替换为同一列的数值

如果满足条件,则用另一列中的值替换一列中的行

对于sql中的特定条件,同一列中的数据总和如何计算?

如何使用C#在同一列中计算相同元素或特定条件?

在同一列的行之间应用条件

如果满足特定条件,则定义结构

选择一行或多行满足特定条件的组

根据Pandas中的特定条件将值从一列复制到同一行中的其他列

如果组中的一行在熊猫中满足特定条件,如何选择组的所有行

为每一行提取符合特定条件的第一列

如果一行满足特定条件,则在多索引数据框中选择整个子组

列是每天同一列的值之间的差异

满足特定条件的列的列表

如果满足特定条件,则在Excel中确定两个日期之间的天数

如果至少一列中的值满足使用Pandas any的条件,则选择行

如果满足条件,则用另一列的行值替换行值