SQL查询:执行联接+分组+日期条件

问题描述

我有两个带有日期信息的表。我想在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

我一直在考虑将WHEREHAVING函数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;

您的示例查询似乎还具有您未描述的其他条件。这将回答您所提出的问题。