如果达到特定条件,计数重置为 0

Posted

技术标签:

【中文标题】如果达到特定条件,计数重置为 0【英文标题】:Count reset to 0 if reached a certain condition 【发布时间】:2021-09-04 10:04:51 【问题描述】:

以下示例演示了这种情况:

以下是样本数据:

以下是输出期望(注意'entity'列中的实体不止1个):

is_hit 在变量 a 为 时定义 如果过去几天的总命中数达到 3,则定义变量_a

我要做的是标记实体是否有累计命中总数达到 3。一旦实体被标记,命中计数应该再次重置为 0。 按照这个逻辑,查看 6 月 4 日和 6 月 9 日标记的实体 A 上方的演示。

目前,我的问题是将 is_tagged 逻辑应用于查询。有没有办法在 SQL 中做到这一点?

【问题讨论】:

我很困惑。数据中是否有“命中数”?您在第一张图片中显示它,但不在示例数据中。 您的屏幕截图看起来像 Excel,您是否使用了错误的标签? 我很抱歉造成混淆,“命中数”只是为了演示累积命中数@GordonLinoff。 不,我使用 excel 只是为了简单演示我面临的案例@H.Pauwelyn 【参考方案1】:

如果我理解正确,你想要row_number()

select t.*,
       (case when is_tagged and
                  mod(row_number() over (partition by entity, is_tagged
                                         order by date
                                        ),
                       3) = 0
             then true
        end)
from t;

注意:这假定您的列是布尔值。如果它们是字符串,则使用'true'

【讨论】:

谢谢你的回答,抱歉之前的困惑。我已经更新了我的问题,这似乎没有回答我的问题。我需要计算 is_hit = true 列,如果总数达到 3,那么它将被标记在 is_tagged 列中。此外,一旦它被标记,计数将再次从 0 开始,如第一张图片所示 @doo 。 . .正确的。你不只是想要第一个。你可以使用mod()

以上是关于如果达到特定条件,计数重置为 0的主要内容,如果未能解决你的问题,请参考以下文章

组内的 Cumsum 并在 pandas 的条件下重置

R(dplyr)中复位的条件运行计数(累计和)

熊猫计数和求和特定条件

红移。在条件下删除表

PostgreSQL 按特定条件分组并计数

Apache pig Store 基于条件