问题描述
我有两个带有日期信息的表。我想在Table_Y
中指定的日期位于TABLE_X
的最小日期和最大日期之间的情况下加入两个表。
我有以下查询,其中我确定TABLE_X
中的最小和最大日期并执行联接以包括两个表的信息。我应该如何包含仅包含bb.date between aa.min_startdate and aa.max_startdate
所在行的语句?请注意,TABLE_Y
的日期列未在当前查询中指定,因为我不想将其包括在最终表中。
SELECT
aa.column_1,bb.column_2,bb.column_3,bb.column_4,MIN(aa.startdate) AS min_startdate,MAX(COALESCE(aa.enddate,CURRENT_DATE)) AS max_startdate
FROM TABLE_X AS aa
INNER JOIN TABLE Y AS bb
ON bb.column_2 = aa.column_2
AND bb.column_3 = aa.column_3
GROUP BY 1,2,3,4
我一直在考虑将WHERE
或HAVING
函数与bb.date between aa.min_startdate and aa.max_startdate
组合使用的顺序,但这只会由于聚合函数而导致错误。
解决方法
我有两个带有日期信息的表。我想在Table_Y中指定的日期在TABLE_X的最小和最大日期之间的条件下加入两个表。
我建议这样:
select . . .
from table_y y join
(select x.*,min(start_date) over () as min_start_date,max(start_date) over () as max_start_date
from x
) x
on y.date between x.min_start_date and x.max_start_date;
您的示例查询似乎还具有您未描述的其他条件。这将回答您所提出的问题。