2017-02-24 91 views
0

我的目標是建立一個標誌,表示過去3天,條件是3個工作日必須通過。 在假設今天的日期是2月27日:TSQL:標記3天,從3個工作日前開始

我有以下輸入:

輸入:

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

這裏的一個選擇雖然可能不是最優的,但是可以使用相關的子查詢來計算前兩天和當天的工作日。在情況下,這是理貨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 

注意,這個答案假定您有連續的數據,一天一天。如果不是,那麼我們必須考慮如何在連續的幾天內處理休息。

+0

我只是測試這個,但已經看起來像一個很好的解決方案。 – DauleDK