TSQL:标志3天,从3个工作日开始

时间:2017-02-24 14:35:00

标签: tsql

我的目标是建立一个标志,指示过去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

我一直在研究几个想法,但没什么好处。

1 个答案:

答案 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

请注意,此答案假定您每天都有连续数据。如果没有,那么我们必须考虑如何在一系列日子里处理休息。