首页 文章

什么是交叉连接两个大表以获得总运行的有效替代方案?

提问于
浏览
0

我有2个表,其架构如下:table1

event_dt
6/30/2018
7/1/2018
7/2/2018
7/3/2018
7/4/2018
7/5/2018
7/6/2018
7/7/2018
7/8/2018
7/9/2018
7/10/2018

表:2

event_dt    time(in seconds)
7/7/2018     144 
7/8/2018     63 
7/1/2018     47 
7/8/2018     81 
7/9/2018     263 
7/7/2018     119 
7/8/2018     130 
7/9/2018     206 
7/5/2018     134 
7/1/2018     140

对于表1中的每个日期,我想找到截至该日期的累积时间 . 因此,我使用交叉连接来使用以下代码获取输出:

select t1.event_dt, sum(t2.time)
from yp1 t1 cross join yp2 t2
where t1.event_dt>=t2.event_dt
group by t1.event_dt

使用此查询,只要在该日之前有事件,我就可以获得表1中每个日期的累计运行总计 . 例如,第一个事件日期是07/01/2018,但表1中的第一个日期是06/30/2018,因此最终输出6/30/2018将不存在 .

这种方法的问题是交叉连接花费的时间太长,我有数百万条记录,因为每6秒进行一次观察 . 有没有一种方法可以在没有交叉连接的情况下获得相同的结果,或者以任何更有效的方式获得相同的结果 .

1 回答

  • 2

    我认为最好的方法是使用SQL的累积和函数:

    select event_dt, running_time
    from (select event_dt, time, sum(time) over (order by event_dt) as running_time
          from ((select event_dt, null as time
                 from t1
                ) union all
                (select event_dt, time
                 from t2
                ) 
               ) tt
         ) tt
    where time is null;
    

相关问题