从事件流中自我加入日期的有效方法是什么?

编码器

我是第一次在事件流上工作,所以自我加入一个表是我没有做太多大规模的事情。我正在尝试编写 SQL 脚本,以便在用户登录后为我提供聊天大厅的加载时间。下面我有一个 ETL 示例脚本。我想知道是否有更好的方法来加入我所做的。我还考虑将子查询分解为两个单独的表并进行左连接,但不确定哪种方式被认为是最佳和更好的实践。我也想过做CTE。

DROP TABLE IF EXISTS event_stream;
create table event_stream
(
   event varchar(50),
   action varchar(100),
   userid int,
   session_id int,
   date timestamp
);


INSERT INTO event_stream(event, action, userid, date,session_id) VALUES
('login', 'success', 1, '2017-08-15 12:30',100),
('chatlobby','loaded', 1, '2017-08-15 12:30:10',100),
('entered_chatroom','chatroom1',1,'8/15/2017 12:31',100),
('login', 'success', 54, '2017-08-15 01:30',101),
('chatlobby','loaded', 54, '2017-08-15 01:30:05',101),
('entered_chatroom','chatroom2',54,'8/15/2017 01:31',101);

Select a.userid, a.session_id, b.date - a.date as load_time
from 
   (Select * from event_stream where event = 'login' and action='success') a
JOIN
   (Select * from event_stream where event = 'chatlobby' and action = 'loaded') b 
ON a.session_id = b.session_id

我上面创建的脚本是使用 PostgreSQL 完成的

丹·布拉克

您的子查询的等价物是:

from event_stream login join event_stream load on login.session_id = load.session.id
and login.action = 'success' 
and load.action = 'loaded'

这更简单,简单有其优点。要查看哪种方式执行得更快,请对其进行测试。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

处理以下查询的有效方法?在SQLServer或PostgreSql中(自我加入)

在Swift中迭代日期范围最有效的方法是什么?

在micropython中将列表加入字符串的最有效的内存方法是什么?

在LISP中存储棋盘的有效方法是什么?

在pygame中做陷阱的有效方法是什么?

在Haxe中循环最有效的方法是什么?

在javascript中获取数字的最低有效位的最有效方法是什么?

使用 JavaScript 的事件委托设置删除事件侦听器的有效方法是什么

筛选(平滑)连续流数据的最有效方法是什么

在Docker容器之间流数据的最有效方法是什么

在多个存储库之间共享github工作流的最有效方法是什么?

合并具有嵌套键和日期键的对象的最有效方法是什么?

在大量元素上添加事件监听器的最有效方法是什么?

按日期和/或月份和/或年份检索记录的最有效方法是什么?

找到最小时间和日期戳的有效方法是什么?

从PostgreSQL的时间戳中提取日期的最有效方法是什么?

计算自上次维护以来的日期差的有效方法是什么?

在iOS / Swift应用程序中跟踪时间/日期的最有效方法是什么?

Avalara:json日期的“ DateTime”有效格式是什么?

在R中的整数中找到最低有效置位的最快/最有效方法是什么?

我在JPA查询期间收到转换类型错误,有效对话的最佳方法是什么?

对我的代码执行输入验证的最有效方法是什么?

更改我的200多个帐户密码的有效方法是什么?

自我加入的目的是什么?(用英语)

对于Mac上的高带宽数据流,最有效的进程间通信方法是什么?

如果任务之间的数据流很大,利用dask多处理调度程序的最有效方法是什么?

从对象中删除所有符号的最有效方法是什么?

在Python中查找数字的所有因子的最有效方法是什么?

从Python中的类方法返回多个值的最有效方法是什么?