我有以下2个表
TABLE1
REFNO XDATE XNUM
123 01/01/2017 111
456 01/07/2017 111
789 01/01/2017 222
TABLE2
YNUM YDATE
111 03/01/2017
111 04/07/2017
222 03/01/2017
222 04/01/2017
Expected Result
REFNO XCOUNT
123 1
456 1
789 2
我想知道是否可以通过REFNO对这些数据进行分组。使用上述数据,REFNO 123& 456都使用XNUM 111,但是在YDATE 04/07/2017之后是2017年7月1日之后,它被计入REFNO 456。
所以,我要找的是表2中YNUM的计数,基于它的相应REFNO。
答案 0 :(得分:1)
在这样的日期获得比赛是棘手的。在其他数据库中,我会使用相关的子查询,但这在Oracle中并不容易起作用(因为相关子句嵌套得太深)。
而是让我们添加完整的日期范围并使用left join
:
select t1.refno, count(t2.refno)
from table1 t1
(select t2.*, lead(xdate) over (partition by refno order by xdate) as next_xdate
from t2
) t1
on t1.refno = t2.refno and
t1.ydate >= t2.xdate and
(t1.ydate < t2.next_xdate or t2.next_xdate is null)
group by t1.refno;