我有一个表,每行都包含一个带有时间戳格式的开始和结束日期,需要根据开始和结束之间的工作日数对它们进行筛选。
基于这里发布的一些解决方案,我创建了一个包含所有天数的单独表格,并用如下布尔字段标记它们:
CREATE TABLE tbl_holiday (h_date TIMESTAMP, is_holiday BOOLEAN)
是否可以编写一个查询,根据start_date和date_date之间的天数进行筛选,并将_Is_holiday设置为False?
我的数据库是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(cast(is_holiday as int)) = :no_of_business_days