时间序列中的SQL滚动计数

时间:2019-06-20 16:03:07

标签: sql sqlite

我有一个SQLite公司表,十年内每天为每个公司写多少篇新闻文章(约有3000家公司)。我想进行“滚动”计数,在每家公司的情况下,我会在3天的时间内计算新闻总数,前提是新闻总数为正。例如,从第1天开始,如果文章数为0,则跳至第2天,依此类推,直到我们找到有1条文章的一天(例如第4天),然后计算接下来的3天(因此4,5,6天)。在那之后,我进入第7天,继续扫描,直到找到第一篇包含新闻的文章,然后重复这3天的总和,然后继续扫描,以此类推。我将为每个公司重复此操作。

我曾经考虑过使用窗口函数来进行滚动总和,但是对于3000家公司而言,365 * 10天的数据滚动总和在计算上可能会花费很长的时间,而且我不需要在我需要的几天内计算总和跳过(因此可以选择0天或3天间隔内不是第一天的天)。

例如,每个公司的时间序列可能是(第#天:文章数)

builder

那么输出将是

Day 1:0
Day 2:0
Day 3:0
Day 4:1
Day 5:3
Day 6:2
Day 7:0
Day 8:0
Day 9:20
Day 10:2
Day 11:0

1 个答案:

答案 0 :(得分:1)

在最新版本的SQLite中,您将使用row_number()

select company, min(date), max(date), sum(num_articles)
from (select t.*,
             row_number() over (partition by company order by date) as seqnum
      from t
      where num_articles > 0
     ) t
group by company, floor((seqnum - 1) / 3);