结合mySQL子查询、动态BETWEEN



我正在使用MySQL,并尝试将两个子查询组合在一起。这是关于时间的,不包括时间跨度。

第一个(工作(查询在星期六和星期日(工作日(之间的每一个有效日期获取我:

SELECT * FROM 
(SELECT adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from
(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t0,
(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t1,
(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2,
(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3,
(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t4) v
WHERE selected_date BETWEEN '2021-04-01' and '2021-07-15'
AND weekday(selected_date) <> 5
AND weekday(selected_date) <> 6

第二个查询从表(UNIX时间戳(中获取假期的开始和结束日期,并以与第一个查询相同的方式将这些日期格式化为两个单独的值(from,to(:

SELECT date_format(FROM_UNIXTIME(from),'%Y-%m-%d') AS "from", date_format(FROM_UNIXTIME(to),'%Y-%m-%d') AS "to" FROM vacation

我正试图从我的第一个查询中的第二个查询中消除在"from"one_answers"to"之间的时间跨度内出现的所有日期。让我头疼的是,我不知道如何动态设置多个BETWEEN来过滤掉这些范围。第二个查询返回多个"from"one_answers"to"值,我想将它们用作"to";NOT BEWEEN Filter";我的第一个问题。

我希望我所说的对你有意义。我很高兴每一个答案都把我推向了正确的方向。

提前感谢

Felix

使用LEFT JOIN连接两个查询,然后使用NULL检查排除匹配的行。

SELECT t1.*
FROM (first query) AS t1
LEFT JOIN (second query) AS t2 ON t1.selected_date BETWEEN t2.from AND t2.to
WHERE t2.from IS NULL

如果第二个查询返回DATETIME值而不是格式化的日期,那么也会更好,因此请删除对DATE_FORMAT()的调用。

最新更新