首页 > 解决方案 > 通过删除周六和周日生成指标

问题描述

Customer_Id     IEX_Type    Call_Date         Day_Name    Required_Output

074332          AFTW IMA    2019-08-02  Friday       1
074332          AFTW IMA    2019-08-03  Saturday     0
074332          AFTW IMA    2019-08-04  Sunday       0
074332          AFTW IMA    2019-08-05  Monday       0
074332          AFTW IMA    2019-08-06  Tuesday      0
074332          AFTW IMA    2019-08-07  Wednesday    0
074332          AFTW IMA    2019-08-08  Thursday     0 
074332          AFTW IMA    2019-08-12  Monday       1
074332          AFTW IMA    2019-08-13  Tuesday      0
074332          AFTW IMA    2019-08-14  Wednesday    0
074332          AFTW IMA    2019-08-22  Thursday     0
074332          AFTW IMA    2019-08-23  Friday       0
074332          AFTW IMA    2020-10-31  Saturday     0
074332          AFTW IMA    2020-11-01  Sunday       0
074332          AFTW IMA    2020-11-02  Monday       1
074332          AFTW IMA    2020-11-03  Tuesday      0
074332          AFTW IMA    2020-11-04  Wednesday    0
074332          AFTW IMA    2020-11-05  Thursday     0
074332          AFTW IMA    2020-11-06  Friday       0

对于上表,我需要根据 customer_id 和 IEX_Type 生成指标,但这里的条件是……call_date 在 5 天之间需要为第一条记录生成指标为 1,其余记录需要生成作为 0 ......还有一个主要条件是......我们不应该在这 5 天里考虑周六和周日......

我已经尝试了递归 CTE 并生成了行号(),但我无法在这 5 天内删除周六和周日的......任何人都可以帮助我使用 T-SQL 脚本。

标签: sql-serversql-server-2016

解决方案


检查以下是否适合您

;WITH 
cte_data AS (
    SELECT *,
            ROW_NUMBER() OVER (ORDER BY Call_Date ) rn
    FROM table_name 
    WHERE DATENAME(dw,Call_Date) not in ('saturday','sunday') 
)
, cte_data_excluded AS (
    SELECT *
    FROM table_name 
    WHERE DATENAME(dw,Call_Date)  in ('saturday','sunday') 
)

SELECT  Customer_Id,
        IEX_Type,
        Call_Date,
        Day_Name,
        CASE WHEN rn%5=1 
                THEN 1 
            ELSE 0 
        END Required_Output
FROM cte_data
UNION ALL
SELECT Customer_Id,
        IEX_Type,
        Call_Date,
        Day_Name,
        0
FROM cte_data_excluded
ORDER BY 3

推荐阅读