[英]Count how many dates fall into the between interval
我正在尝试编写一个 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年。
现在我希望当假期位于“交货日期”和“绩效日期”之间时,新的绩效日期(例如,新变量,它不需要是同一个变量)在每个假期再移动一天落入时期。
我希望有像这样的解决方案
..when '18.07.2020' between performancedate and deliverydate then '1' else '0'"
然后可以将Sum(newvariable)
与group by
结合使用,并将其添加到以前的执行日期。 这只是一个可能的解决方案。
(PS:我对SQL程序的功能非常有限,因为它只是我们商品管理中的一个SQL菜单select
等工作......)
你的问题很难理解。 根据标题:
计算有多少日期落入间隔
如果您想要两个日期之间的公共假期数,那么一个选项是相关子查询:
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;
不过,我怀疑您想在考虑假期的情况下计算未来某个时间的日期。 如果是这种情况,我建议您提出一个新问题,提供样本数据、期望的结果,并尝试更清楚地解释您想要完成的工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.