我该如何选择
过去一周 前一年的对应天数 这是仪表盘所必需的,我想显示一个图表,其中包含过去7天的结果。如果我们的呼叫中心在一定时间内处理了98%的电话,则显示为绿色;如果超过98%,则显示为红色。作为参考,我想在下面创建一个图表,其中包含前一年的相应7天。这具有挑战性,因为工作日确实会影响工作量。这意味着我无法将星期二与星期日或星期一进行比较。
例如,今天是2019年12月21日星期六,我想报告以下时间跨度:
2019-12-13 00:00:00-> 2019-12-20 23:59:59 和 2018-12-14 00:00:00- > 2018-12-21 23:59:59
我编写了以下代码(在select语句中使用):
case when cs.ReachedAt between (getdate() - 7) and getdate() then 1 else 0 end as Is_PastWeek
case when cs.ReachedAt between (convert(datetime, convert(varchar(50), convert(date, dateadd(d, -1, dateadd(wk, -52, getdate())))) + ' 23:59:59')) and (convert(datetime, convert(varchar(50), convert(date, dateadd(d, -8, dateadd(wk, -52, getdate())))) + ' 00:00:00')) then 1 else 0 end as Is_SameWeekLastYear
它有效,但不是完美的。我只是选择与52周前同一周的相应工作日。这意味着我有时最终会选择匹配的工作日,而不是最近的工作日。我该如何做得更好?
编辑
为了阐明“选择上一年中最近的对应工作日”的意思,我举了以下示例:
with cte1 as (
select row_number() over (order by (select 1)) - 1 as incrementor
from master.sys.columns sc1
cross join master.sys.columns sc2
), cte2 as (
select dateadd(day, cte1.incrementor, '2000-01-01') as generated_date
from cte1
where dateadd(day, cte1.incrementor, '2000-01-01') < getdate()
), cte3 as (
select convert(date, generated_date) as generated_date
, convert(date, getdate()) as now_date
from cte2
), cte4 as (
select *
, convert(date, dateadd(YEAR, -1, now_date)) as year_back
from cte3
)
select now_date
, generated_date
from cte4
where 1=1
and datepart(week, year_back) = datepart(week, generated_date)
and datepart(DW, year_back) = datepart(DW, generated_date)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。