我有两个表,一个是biz_dateholiday

create table biz_date (t_date string,start_date string,biz_day int)
create table holiday (h_date string)

现在我想为biz_date表中的每一行计算t_date和start_date之间的h_date数,然后从biz_day中减去它。 biz_day是该月某天的营业日,而start_date是t_date该月的开始日期。例如
biz_date
1990-02-06 1990-02-01 4

我尝试了这个hiveql查询
select b.t_date,b.biz_day,b.biz_date-cnt,h.h_date,
if(b.start_date>=h_date && b.t_date> h.h_date) then count(h_date)as cnt
from biz_date b,holiday h;

最佳答案

这将为您提供t_date biz_date表中每个记录在h_date和start_date之间的假日数。我强烈建议您将日期存储为日期而不是字符串。否则,如果日期格式不正确,或者不是按YEAR / MONTH / DAY的顺序排列,则可能无法正常工作。

SELECT bd.*,
       (SELECT COUNT(*) FROM holiday WHERE h_date BETWEEN bd.t_date AND bd.start_date) as holiday_count

FROM   biz_date as bd

10-08 11:22