假设我有两张桌子.一个表包含员工信息和员工获得晋升的日期:
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语句中使用它们.我不知道怎么办这个.
最长促销日期是:
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)
| 归档时间: |
|
| 查看次数: |
4778 次 |
| 最近记录: |