sql - SQL 按天分解不完整记录多长时间
问题描述
我问了一个类似的问题,这个SQL 每日杰出销售,滚动聚合?但是,我现在需要每天了解销售业绩持续了多长时间。这将分组为 24 小时(或一天)间隔,最多 72 小时。下面是数据集输出的一个示例,超时将在一个组内,但日期需要是任何日期,即使它不在数据集中,可以在第二行看到 2020-01-02
Date TimeOutstanding VolumeOutstanding
2020-01-01 Under24Hour 1
2020-01-02 Under48Hour 1
2020-01-03 Under24Hour 3
2020-01-03 Under72Hour 1
2020-01-04 Under48Hour 3
2020-01-05 Under72Hour 2
2020-01-05 Over72Hour 1
数据集
SaleID Date Outcome
1 2020-01-01 New
1 2020-01-01 Complete
2 2020-01-01 New
3 2020-01-03 New
4 2020-01-03 New
5 2020-01-03 New
2 2020-01-04 Complete
5 2020-01-04 Complete
3 2020-01-06 Complete
4 2020-01-07 Complete
解决方案
首先,您可以用新的和完成的日期来总结每个 salesid。然后,生成您关心的日期。并使用条件聚合:
select d.date,
count(*) as num_open,
sum(case when new_date >= dateadd(day, -1, d) then 1 else 0
end) as within_1day,
sum(case when new_date < dateadd(day, -1, d) and new_date >= dateadd(day, -3, d then 1 else 0
end) as within_1_3days_ago,
. . .
from (select distinct date from t) d left join
(select salesid, min(date) as new_date,
nullif(max(date), min(date)) as completed_date
from t
group by salesid
) t
on new_date <= date and (date < completed_date or completed_date is null)
group by d.date
推荐阅读
- python - 如何使用python按类型终止进程win32mutex
- python - 在pycharm中使用远程解释器时aws boto3访问被拒绝
- arrays - 使用 JQ 将对象数组转换为对象列表
- pandas - 在聚合操作中重命名 Lambda 函数返回的值
- c++ - 为什么我的 C++ 应用程序不读取 Regedit 条目?
- macos - 如何从谷歌浏览器中检索填充的 PDF
- flutter - 如何在颤动中嵌套标签?
- list - 如何将 Firestore 中的数据添加到本地列表中
- image-processing - RuntimeError:mat1 和 mat2 形状不能相乘(65536x2 和 1x256)
- android - 如何在Android Q中打开带有意图的pdf