sql - 交叉连接两个大表以获得运行总数的有效替代方法是什么?
问题描述
我有 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,因此最终输出中不会出现 2018 年 6 月 30 日。
这种方法的问题是交叉连接花费的时间太长,我有数百万条记录,因为每 6 秒进行一次观察。所以有没有一种方法可以在没有交叉连接的情况下获得相同的结果,或者任何更有效的方法。
解决方案
我认为最好的方法是使用 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;
推荐阅读
- android - 如何使用意图在android中创建共享按钮?
- javascript - Chrome 同步处理 iframe 加载,而 Firefox 异步处理
- python - 如何识别 Google 表格中的第一个空列以使用 Python 附加数据框?
- c# - 在 Sql Kata 中获取原始 sql 字符串
- json - 来自 HTTP API 的 Chef Inspec 测试 JSON 输出
- apache - 尝试访问 OS High Sierra 上的 locahost 时出现 403 Forbidden
- pandas - 删除 pandas 中的冗余信号
- python - 用变量切片字符串,Typerror:字符串索引必须是整数
- java - Groovy 将盒装类型传递给 Jenkins,如何拆箱?
- android - RecyclerView 项目在转换到不同的屏幕并返回后更改位置