我的目标是建立一个标志,指示过去3天,条件是必须经过3个工作日。 假设今天的日期是2月27日:
我有以下输入:
输入:
date workday
---------- -------
2017-02-27 1
2017-02-26 0
2017-02-25 0
2017-02-24 1
2017-02-23 1
2017-02-22 1
2017-02-21 1
2017-02-20 1
2017-02-19 1
2017-02-18 1
2017-02-17 0
期望的输出:
date workday flag
---------- ------- ----
2017-02-27 1 0
2017-02-26 0 0
2017-02-25 0 0
2017-02-24 1 0
2017-02-23 1 0
2017-02-22 1 1
2017-02-21 1 1
2017-02-20 1 1
2017-02-19 1 0
我一直在研究几个想法,但没什么好处。
答案 0 :(得分:1)
这里的一个选项,虽然可能不是最优选的,但是可以使用相关子查询来计算前两天和当天的工作日。如果这个标记为3,我们打印1作为标志,否则我们打印0。
WITH cte AS (
SELECT date, workday,
(SELECT SUM(t2.workday) FROM yourTable t2
WHERE t2.date BEWTEEN DATEADD(day, -2, t1.date) AND t1.date) AS w_sum
FROM yourTable t1
)
SELECT t.date, t.workday,
CASE WHEN t.w_sum = 3 THEN 1 ELSE 0 END AS flag
FROM cte t
请注意,此答案假定您每天都有连续数据。如果没有,那么我们必须考虑如何在一系列日子里处理休息。