SQL 查询 - 计算值大于 X 的连续行数
Posted
技术标签:
【中文标题】SQL 查询 - 计算值大于 X 的连续行数【英文标题】:SQL Query - Count number of consecutive rows with value above 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? 【参考方案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;
【讨论】:
以上是关于SQL 查询 - 计算值大于 X 的连续行数的主要内容,如果未能解决你的问题,请参考以下文章