按日期和单独的标准计算数据

时间:2018-02-09 13:36:46

标签: sql oracle

我有以下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。

1 个答案:

答案 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;