仅加入日期小于另一个字段中的最大日期的行

use*_*531 2 sql

假设我有两张桌子.一个表包含员工信息和员工获得晋升的日期:

Emp_ID     Promo_Date
1          07/01/2012
1          07/01/2013
2          07/19/2012
2          07/19/2013
3          08/21/2012
3          08/21/2013
Run Code Online (Sandbox Code Playgroud)

另一张桌子每天都有员工关闭销售:

Emp_ID     Sale_Date
1          06/12/2013
1          06/30/2013
1          07/15/2013
2          06/15/2013
2          06/17/2013
2          08/01/2013
3          07/31/2013
3          09/01/2013
Run Code Online (Sandbox Code Playgroud)

我想加入这两个表,以便我只包括小于最大促销日期的销售日期.所以结果看起来像这样

Emp_ID     Sale_Date     Promo_Date
1          06/12/2013    07/01/2012
1          06/30/2013    07/01/2012
1          06/12/2013    07/01/2013
1          06/30/2013    07/01/2013
Run Code Online (Sandbox Code Playgroud)

对于其余的Emp_IDs依此类推.我尝试使用左连接来实现这一点

left join SalesTable on PromoTable.EmpID = SalesTable.EmpID and Sale_Date 
< max(Promo_Date) over (partition by Emp_ID)
Run Code Online (Sandbox Code Playgroud)

但显然我不能在连接中使用聚合,我已经知道我也不能在where语句中使用它们.我不知道怎么办这个.

Gor*_*off 5

最长促销日期是:

select emp_id, max(promo_date)
from promotions
group by emp_id;
Run Code Online (Sandbox Code Playgroud)

在此日期之前有多种方法可以获得销售,但这是一种方式:

select s.*
from sales s
where s.sales_date < (select max(promo_date)
                      from promotions p
                      where p.emp_id = s.emp_id
                     );
Run Code Online (Sandbox Code Playgroud)