从每个组中检索列的最后一个元素,并将其用作下一组中同一列的第一个元素

桑迪普·托马斯(Sandeep Thomas)

我有一张桌子,如下

Domain     Baseline     PlanningPeriod     Actual   
-------------------------------------------------      
Dom 1       Jan 18        1/1/18            10
Dom 1       Jan 18        1/2/18            20
Dom 1       Jan 18        1/3/18            25
Dom 1       Jan 18        1/4/18            24
Dom 1       Feb 18        1/2/18            60
Dom 1       Feb 18        1/3/18            20
Dom 1       Feb 18        1/5/18            40
Dom 1       Feb 18        1/12/18           70
Dom 1       Mar 18        1/3/18            11
Dom 1       Mar 18        1/4/18            12
Dom 1       Mar 18        1/12/18           18
Dom 1       Apr 18        1/4/18            40
Dom 1       Apr 18        1/5/18            25
Dom 1       Apr 18        1/6/18            15
-------------------------------------------------

请注意,也有不同的域

因此,我试图按域,基线,计划时间分组来获得一个额外的列可交换实际值。

为此,我做了以下查询

select domain,baseline,planningperiod, actual,sum(actual) over(partition 
by domain, baseline order by domain,baseline,planningperiod) as cumilativeactual

幸运的是,它按预期工作,并给出了以下结果

Domain     Baseline     PlanningPeriod     Actual    CumActual 
----------------------------------------------------------------      
Dom 1       Jan 18        1/1/18            10        10
Dom 1       Jan 18        1/2/18            20        30
Dom 1       Jan 18        1/3/18            25        55
Dom 1       Jan 18        1/4/18            24        79
Dom 1       Feb 18        1/2/18            60        60
Dom 1       Feb 18        1/3/18            20        80
Dom 1       Feb 18        1/5/18            40        120
Dom 1       Feb 18        1/12/18           70        190
Dom 1       Mar 18        1/3/18            11        11
Dom 1       Mar 18        1/4/18            12        23
Dom 1       Mar 18        1/12/18           18        31
Dom 1       Apr 18        1/4/18            40        40
Dom 1       Apr 18        1/5/18            25        65
Dom 1       Apr 18        1/6/18            15        80
--------------------------------------------------------

但是我的要求有点疯狂。我需要每组的最后一个元素作为下一组的第一个元素。但是组中的其他值与上面完全相同。所以我真的很困惑如何实现这一目标。我不喜欢游标,因为大约有2万条记录。

上面的方法应如下工作。

Domain     Baseline     PlanningPeriod     Actual    CumActual 
----------------------------------------------------------------      
Dom 1       Jan 18        1/1/18            10        10
Dom 1       Jan 18        1/2/18            20        30
Dom 1       Jan 18        1/3/18            25        55
Dom 1       Jan 18        1/4/18            24        79
Dom 1       Feb 18        1/2/18            60        **79**
Dom 1       Feb 18        1/3/18            20        80
Dom 1       Feb 18        1/5/18            40        120
Dom 1       Feb 18        1/12/18           70        190
Dom 1       Mar 18        1/3/18            11        **190**
Dom 1       Mar 18        1/4/18            12        23
Dom 1       Mar 18        1/12/18           18        31
Dom 1       Apr 18        1/4/18            40        **31**
Dom 1       Apr 18        1/5/18            25        65
Dom 1       Apr 18        1/6/18            15        80
--------------------------------------------------------
伊利斯

您可以使用CTE和LAG()作为

with cte as
(
select domain,
       baseline,
       planningperiod, 
       actual,
       sum(actual) over(partition 
       by domain, baseline order by domain,baseline,planningperiod) as cumilativeactual
from t
)
select domain,
       baseline,
       planningperiod, 
       actual,
       case when actual = cumilativeactual then
            lag(cumilativeactual, 1, 0) over(order by domain,baseline,planningperiod)
            else
            cumilativeactual end as cumilativeactual
from cte

演示版

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

R:识别重复组中的第一个和最后一个元素

在列中查找第一个元音并将其显示在下一列中

使用同一组中满足条件的下一个第一行设置列值

CSS选择器-同一组中具有Class的第一个元素

熊猫从组中获取列的第一个和最后一个值

熊猫:与组中第一个元素的区别

5个一组中的组值,然后从每个组返回第一个值

如何从 MongoDB 数组中检索第一个和最后一个元素并将其设置为不同的字段?

在pandas DataFrame中更改每个组的第一个元素

如何使用jQuery选择每个组中的第一个元素?

将组中的每个第一个元素取为

如何对groupby结果的第一个值求和并将其写为相关组中的df列

熊猫=>按组获取第一个和最后一个元素的索引

使用 pd.apply() 将列中的每个元素转换为列表,抓取第一个元素,并将其转换为日期时间

在3+列数据框中的熊猫中每个组的第一个和最后一个位置之前和之后添加行

添加一个列项,作为另一列中列表的第一个元素

查找最后一组正则表达式的第一个元素的索引?

从一组中随机删除一列,不包括一个

具有多列的表中每个组的第一个非空值

查找每个组的第一个实例并填充到R中的新列

保留 DataFrame 中列的第一个元素

识别由熊猫中的多个列组成的组中的第一个非零元素

SQL返回一组列中不为null的最后一个列值

熊猫通过保留一列的第一个元素和另一列的最后一个元素来合并

如何使用r中“下一个”组的第一个值?

选择行中的最后一个值并将其放在另一列中

通过忽略某些元素来提取一组数字的第一个和最后一个出现

删除组中的第一个和最后一个观测值

使用RLE从组中获取第一个和最后一个值