如何在 SQL 中设置滚动的 7 天第 75 个百分位数?

Posted

技术标签:

【中文标题】如何在 SQL 中设置滚动的 7 天第 75 个百分位数?【英文标题】:How do I set up a rolling 7 day 75th percentile in SQL? 【发布时间】:2020-11-17 06:03:09 【问题描述】:

我有一个包含以下列的表格:

活动日期 位置 员工编号 任务名称 每小时处理量

使用PostgreSQL,我需要计算所有员工 ID 和事件日期中给定位置和任务名称的每小时交易量的第 75 个百分位(假设滚动窗口为 7 天)。例如,如果活动日期是 2020 年 11 月 16 日,我将采用 2020 年 11 月 9 日到 2020 年 11 月 16 日之间的所有个人日期和员工 ID 的每小时交易量的第 75 个百分位。 有人可以帮我解决这个问题吗?

样本数据:

样本输出:

【问题讨论】:

您标记了 amazon redshift,但在您的问题中提到了 postgres。 欢迎来到这里@user14652614。为了帮助我们为您提供支持,请提供更简单的说明来说明您需要做什么,因为我们可能不理解您的域术语。如果您提供一些公式对您的计算会有所帮助。 【参考方案1】:

您应该可以通过使用generate_seriespercentile_disc 来实现此目的

with data_example as
(
 SELECT * FROM (VALUES 
 (date '2020-11-16','ABC',1,'Inbound',10),
 (date '2020-11-16','ABC',2,'Inbound',20),
 (date '2020-11-15','ABC',1,'Inbound',30),
 (date '2020-11-17','ABC',1,'Inbound',10)
 ) AS t (event_date,location,emp_id,task_name,volume)
)
,dates as
(
select generate_series(
           (date '2020-11-10')::timestamp,
           (date '2020-11-25')::timestamp,
           interval '1 day'
         ) as event_date
)
select d.event_date
, d.event_date - INTERVAL '7 day' AS window_start
,location
,task_name
,percentile_disc(0.75) within group (order by de.volume) perc_volume
,count(1) cnt
from dates d
join data_example de
    on de.event_date between d.event_date- INTERVAL '7 day' and d.event_date
group by 1,2,3,4
order by 1,2,3,4;

【讨论】:

您在 event_date-7 和 event_date 之间加入的方法非常适合在每天的水平上获得 7 天的尾随窗口。效果很好,谢谢! 很高兴听到这个消息,您能否将其标记为答案,欢迎加入社区

以上是关于如何在 SQL 中设置滚动的 7 天第 75 个百分位数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中设置滚动条颜色?

如何在 listView 中设置最终滚动的位置?

如何在 Java GUI 中设置 JTextArea 的自动滚动?

如何在android应用程序中设置垂直动画滚动

iOS - 如何在 UIPageViewController 中设置 UIScrollView 以在重新启用后开始滚动

如何在 UIView 中设置滚动视图以向上滑动被键盘隐藏的文本字段?