如何解决这个重复行?

问题描述 投票:0回答:1

我有一个包含两个WITH 子句的查询。第一个“feriados”返回名为“holidays”的表中的行的开始日期和结束日期之间的每一天。假期可能在同一天开始和结束,也可能有不同的开始和结束日期。第二个子句定义了一个名为“data_distinta”的函数,该函数确定一天是否是有效工作日。有效工作日定义为既不是周末也不是假日的一天(假日由“feriados”函数过滤)。当是有效工作日时,函数返回 1;当是有效工作日时,函数返回 1。否则,返回 0。

我遇到的问题是,最终结果显示两个相同的日子,“有效工作日”的值相反。

我无法创建新表来表示日历,并且现有日历表仅包含假期。

WITH RECURSIVE feriados AS 
(
    SELECT begin_date AS dateValue, entities_id AS id
    FROM  holidays
    UNION ALL
    SELECT DATE_ADD(dateValue, INTERVAL 1 DAY), id AS id
    FROM feriados
    WHERE DATE_ADD(dateValue, INTERVAL 1 DAY) <= (SELECT end_date FROM  holidays WHERE DATE_ADD(dateValue, INTERVAL 1 DAY) BETWEEN begin_date AND end_date)
),

data_distinta AS 
(
    SELECT DISTINCT DATE( tickets.date) AS data, 
    
    (CASE
            WHEN WEEKDAY( tickets.date)>=5 THEN 0
            WHEN WEEKDAY( tickets.date)<5 AND DATE( tickets.date) NOT LIKE feriados.dateValue THEN 1
            WHEN DATE( tickets.date) LIKE feriados.dateValue THEN 0 

    END
    ) AS validWorkDay
    
    FROM  tickets
    LEFT JOIN  entities
        ON ( tickets.entities_id =  entities.id)
    LEFT JOIN  calendars
        ON ( calendars.entities_id =  entities.id)
    LEFT JOIN  calendars_holidays
        ON ( calendars.id =  calendars_holidays.calendars_id)
    LEFT JOIN  holidays
        ON ( holidays.id =  calendars_holidays.holidays_id)
    JOIN feriados)
SELECT data_distinta.data, data_distinta.validWorkDay
FROM data_distinta
WHERE data_distinta.data >= '05/01/2024'

这是我的代码

我期待着

enter image description here

但我越来越

enter image description here

mysql database
1个回答
0
投票

不需要递归 CTE。只需将

LEFT JOIN
holidays
表结合使用,即可测试门票日期是否在假期的日期范围内。如果有比赛,那么购票日期就是假期期间。

SELECT DISTINCT DATE(t.date) AS data, 
                CASE WHEN WEEKDAY(t.date) >= 5 THEN 0
                     WHEN h.id IS NULL THEN 1
                     ELSE 0
                END AS validWorkDay
FROM tickets AS t
LEFT JOIN holidays AS h ON t.date BETWEEN h.begin_date AND h.end_date
WHERE t.date >= '2024-05-01'

我不确定你为什么要加入所有其他表,你从不使用它们中的任何东西。

© www.soinside.com 2019 - 2024. All rights reserved.