【发布时间】:2016-09-30 06:34:16
【问题描述】:
我有下表:
+--------+-------+------+--+
| Object | Event | Time | |
+--------+-------+------+--+
| Obj1 | A | 1 | |
| Obj1 | B | 3 | |
| Obj2 | A | 7 | |
| Obj2 | B | 4 | |
+--------+-------+------+--+
我的目标是获取所有同时具有事件 A 和 B 的对象,条件是 A 先发生(及时)。到目前为止,我只提出了一个查询来找到所有具有 A 和 B 的对象,但不包括时间:
SELECT DISTINCT Object
FROM
(SELECT *
FROM
(SELECT *
FROM table
INNER JOIN
(SELECT Object Obj
FROM table
WHERE event LIKE '%A%' AS temp_table) ON table.Object = temp_table.Obj) AS temp_final
WHERE event LIKE '%B%') AS temp2;
所以最终结果是我得到一个只包含以下内容的表格:
Obj1
因为这是唯一满足所有条件的对象。
时间列是现实生活中的日期戳,但为简单起见,我使用了整数。
感谢您的帮助
【问题讨论】:
-
我正在使用 Vertica。我知道有诸如 LAG 和 LEAD 之类的功能,但我想看看是否有通用方法。另外,我仍然不是 100% 如何在我的案例中使用 LAG 和 LEAD :)