【问题标题】:SQL Query - Count number of consecutive rows with value above XSQL 查询 - 计算值大于 X 的连续行数
【发布时间】:2021-03-03 17:39:20
【问题描述】:

我遇到了一个问题,希望得到一些指导。我们希望生成一份报告,计算产品的连续日期数(从用户提供的日期向后看)。数据集如下:

Product, InventoryDate, InventoryQuantity
A, 3/1/2021, 123
B, 3/1/2021, 98
C, 3/1/2021, 101
A, 2/22/2021, 115
B, 2/22/2021, 99
C, 2/22/2021, 105
A, 2/15/2021, 150
B, 2/15/2021, 105
C, 2/15/2021, 50

因此,我们想提取一份报告,内容如下,提供日期为 2021 年 3 月 2 日:

Product, CurrentInventory, PreviousWeeksCountAbove100
A,123,2
B,98,0
C,101,1

尽管我在努力编写查询,但我什至不知道该怎么称呼它,因为我需要对超过特定阈值的连续值进行计数。我可以计算高于阈值的值,但不确定如何添加“连续几周”逻辑。

【问题讨论】:

  • 您可以使用窗口函数来执行此操作。具体的数据库是什么?
  • 你要的是什么 DBMS?

标签: sql


【解决方案1】:

您可以使用窗口函数。根据从末尾开始计数值低于 X 的行数分配一个组。然后过滤聚合:

select product,
       sum(case when grp = 0 and val > 100 then 1 else 0 end) as consecutive_weeks
from (select t.*,
             sum(case when val <= 100 then 1 else 0 end) over (partition by product order by inventorydate desc) as grp
      from t
      where inventorydate <= ?
     ) t
group by product;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多