【问题标题】:Inserting rows based on conditions根据条件插入行
【发布时间】:2020-03-04 15:56:07
【问题描述】:

表名:CaseHistory

我目前正在使用一个数据集,旨在每周提供有关客户支持案例的见解。在上面的示例中,您可以看到案例 123376 从第 1 周到第 5 周的进展,以及其他案例。我希望能够根据 2 个条件每周为一个案例插入一行:

  • 前几周未回复该案例的最新状态变化
  • 这只需要在该案例没有状态更改更新的几周内完成

例如,第 4 周的案例 123376 没有状态更新,并且此案例的先前状态在第 3 周为“正在等待”(这意味着该案例未得到答复且仍在进行中)。由于第 4 周的案例 123376 没有状态更新,因此给人一种错误的印象,即该案例在第 4 周的数据中不存在。最后,我们想知道客户支持每周有多少(总体)未决案例(不仅是在该周内状态发生变化的案例,还有之前几周的所有案例)。

如何根据上述 2 个条件每周为案例添加行?理想情况下,在每周的数据中,我想回顾所有以前的案例以及所有没有最后状态为“已回答”的案例。对于如何处理和解决此数据问题的任何指导,我将不胜感激?提前谢谢你。

【问题讨论】:

  • 请显示您想要的结果。

标签: sql sql-server tsql date


【解决方案1】:

如果我理解正确,您可以通过各种方式填写缺失的周数。我认为递归 CTE 可能是最简单的:

with cte as (
      select casenumber, status, date, week,
             lead(week) over (partition by casenumber order by week) as next_week, 0 as is_new
      from t
      union all
      select casenumber,
             (case when status = 'New' then 'Waiting' else status end),
             date,
             week + 1, 1
      from cte
      where week < next_week + 1
     )
select cte.*
from cte
where is_new = 1;

注意事项:

  • 这不会在给定case 的最后一条记录之后添加几周。目前尚不清楚您是否需要(如果需要,您可能想提出一个新问题)。
  • 这会将“新”状态更改为其他状态,因此不会重复 'New'

【讨论】:

    【解决方案2】:

    最后,我们想知道客户支持每周有多少(总体)未决案例(不仅是在该周内状态发生变化的案例,还有之前所有几周的案例)。

    这是解决此问题的一种方法:

    select week, sum(cnt) outstanding_cases
    from (
        select week, 1 cnt from mytable where status in ('New', 'Reopened')
        union all
        select week, -1 from mytable where status = 'Answered'
    ) t
    group by week
    order by week
    

    这假设案例的工作流程始终以'New' 开始(或以'Reopened' 重新开始)并以Answered' 结束。

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 1970-01-01
      • 2021-10-20
      • 2018-11-04
      • 2020-09-08
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      相关资源
      最近更新 更多