SQL 按天分解不完整记录多长时间

Posted

技术标签:

【中文标题】SQL 按天分解不完整记录多长时间【英文标题】:SQL How Long Have Incomplete Records Been Outstanding Broken Down By Day 【发布时间】:2020-08-31 07:06:11 【问题描述】:

我已经向SQL Daily Outstanding Sales, Rolling Aggregate? 提出了类似的问题,但是我现在需要了解一天中的销售业绩有多长。这将分组为 24 小时(或一天)间隔,最多 72 小时。下面是数据集输出的一个示例,超时将在一个组内,但是日期需要是 any 日期,即使它不在数据集中可以看到 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

【问题讨论】:

您是否进一步尝试修改之前的答案以获得您所追求的新结果?这些尝试是什么?为什么他们不工作? 我确实调整了上一个答案中给出的解决方案,以解决我遇到的其他一些问题,但由于使用了 getDate,我无法弄清楚这个特定问题 【参考方案1】:

首先,您可以用新的和完成的日期来总结每个 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

【讨论】:

如果表格不包含日期的情况,上面的日期2020-01-02不存在但当天仍有1个未完成的销售。日期可能会丢失,因为当天没有采取任何行动(即没有新的或完成的条目) @Chris。 . .将 d 子查询替换为您想要的日期列表 - 使用 values() 或来自另一个表的显式列表,或者可能通过递归 CTE 生成。

以上是关于SQL 按天分解不完整记录多长时间的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver 2008操作记录 保存多长时间

mysql 500W条记录查询大概多长时间

sql查询报表,怎么按天查

如何在bigquery中按天计算(非)连续记录?

nginx日志文件按天记录定时清理循环记录

如何使用 Postgres 在 Rails 中按天对记录进行分组