【发布时间】:2021-04-01 12:31:47
【问题描述】:
我有一个关于如何高效查询的常见问题。
| id | time |
|---|---|
| d048533c-92d2-11eb-8dbb-fa163e962e00 | 1617272028623 |
| 6b5b455e-92d3-11eb-8dbb-fa163e962e00 | 1617272279382 |
| 024d0a5e-92d3-11eb-8dbb-fa163e962e00 | 1617272106615 |
我们有一张像上面这样的桌子。我们要根据以下条件过滤掉 ID:
- 如果两个或多个 ID 在 3 分钟内有时间,我们称它们为两个以上的组。
- 我们有 10000 个 ID,我们希望找到超过 10 个的所有组。
这是我的答案:
SELECT B.ID FROM TEMP B,TEMP A
WHERE B.ID != A.ID
AND (B.TIME <= A.TIME + 180000 AND B.TIME >= A.TIME - 180000) GROUP BY B.ID HAVING COUNT(*) >= 9;
有没有更有效的方法?
【问题讨论】:
-
请解释一下您所说的“过滤掉 id ......超过 10 个 ID 对应于 3 分钟内的时间”是什么意思。您的数据没有名为
id的列和两个 具有_id后缀的列。 -
对不起,我已经修复了错误
标签: sql optimization group-by common-table-expression having