我有两个表,其模式如下:表1
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
table: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中每个日期的累计运行总数,只要在该日期之前有一个事件。例如,第一个事件日期是2018年1月7日,但表1中的第一个日期是2018年6月30日,因此最终输出中不会出现2018年6月30日。
这个方法的问题是交叉连接花费的时间太长,自从每6秒进行一次观察以来,我有数百万条记录。那么有没有一种方法可以在没有交叉连接的情况下得到相同的结果,或者有没有更有效的方法呢。
1条答案
按热度按时间wqsoz72f1#
我认为最好的方法是使用sql的累积和函数: