我正在尝试编写一个SQL,它可以计算出我们公司的“执行日期”。
要了解一下,我写了一段SQL摘录:
..CASE
WHEN EXTRACT(weekday FROM deliverydate) = 1 THEN (bek.deliverydate-3)
WHEN EXTRACT(weekday FROM deliverydate) = 2 THEN (bek.deliverydate-3)
ELSE
bek.deliverydate-2
END AS performancedate
这很好。 (周末将表演天数增加了一天,因为投放还需要多一天)
我接下来要尝试的是实施“公共假期”,通过该“公共假期”,每个公共假日每天要多移一天。
我的英语不好,所以我希望你能理解到这一点。
我把所有的公共假期变成表格:
'01.01.2020'
'10.04.2020'
'13.04.2020'
'01.05.2020'
'21.05.2020'
'01.06.2020'
'11.06.2020'
'03.10.2020'
'01.11.2020'
'25.12.2020'
'26.12.2020'
'01.01.2021'
'02.04.2021'
'05.04.2021'
'01.05.2021'
'13.05.2021'
'24.05.2021'
'03.06.2021'
'03.10.2021'
'01.11.2021'
'25.12.2021'
'26.12.2021'
'01.01.2022'
'15.04.2022'
'18.04.2022'
'01.05.2022'
'26.05.2022'
'06.06.2022'
'16.06.2022'
'03.10.2022'
'01.11.2022'
'25.12.2022'
'26.12.2022'
接下来的2年之内。
现在,我希望在放假期间,介于 new 表演日期(例如,新变量,不必是相同的变量)的“交付日期”和“表演日期”之间在属于该时段的每个假期再增加一天。
我希望有类似的解决方案
..when '18.07.2020' between performancedate and deliverydate then '1' else '0'"
,然后可以将Sum(newvariable)
与group by
结合使用,并将其添加到以前的演出日期。
这只是一个可能的解决方案。
(PS:我对SQL程序的功能非常有限制,因为它只是我们商品管理中的SQL Menue。select
等有效。)
答案 0 :(得分:0)
您的问题很难回答。根据标题:
计算有多少日期属于两次间隔
如果您想要两个日期之间的公共假期数,则一个选项是相关子查询:
select t.*,
(select count(*)
from holidays h
where h.holiday_date >= t.performance_date and
h.holiday_date <= t.delivery_date
) as num_holidays_between
from t;
不过,我怀疑您希望在将来考虑假期的某个时候计算日期。如果是这样,我建议您提出一个 new 问题,提供示例数据,所需的结果,并尝试对要完成的工作进行更清晰的解释。