我有一个表,每一行都包含带有时间戳格式的开始和结束日期,并且需要按开始和结束日期之间的工作日数进行过滤。
基于此处发布的一些解决方案,我创建了一个全天的单独表格,并用这样的布尔值字段将它们标记为:
CREATE TABLE tbl_holiday (h_date TIMESTAMP, is_holiday BOOLEAN)
是否可以编写一个查询,该查询按_is_holiday为False的start_date和date_date之间的天数进行过滤?
我的数据库是Impala。
您通常会在开始和结束日期不等式条件下将原始表与假期表连接起来,进行汇总,最后在having
子句中根据工作日总数与目标值进行过滤:
select t.id, t.start_date, t.end_date
from mytable t
inner join tbl_holiday h on h.hdate between t.start_date and t.end_date
group by t.id, t.start_date, t.end_date
having sum(case when is_holiday = true then 0 else 1 end) = :no_of_business_days