使用WHERE EXISTS子句优化查询结果

问题描述

我在postgres中有此表:

   id   |     id_datetime     |      longitude      |      latitude      
--------+---------------------+---------------------+--------------------
 639438 | 2018-02-20 18:00:00 |  -122.3880011217841 |  37.75538988423265
 639439 | 2018-02-20 20:30:00 | -122.38756878451498 | 37.760550220844614
 639440 | 2018-02-20 20:05:00 | -122.39640513677658 |  37.76130039041195
 639441 | 2018-02-24 10:00:00 | -122.45819139221014 | 37.724317534370066
 639442 | 2018-02-10 09:00:00 | -122.44693382058489 |  37.77000760474354

我想要一个具有所有差异ID的输出,该输出在最近15分钟到1000米(地理距离)之间至少具有另一个ID。

我的表有10万多行。因此,我目前正在尝试使用下面的查询,该查询有效,但是花费的时间太长。有什么我可以采取的步骤来优化这一点?

SELECT disTINCT
    x.id
FROM table x
WHERE EXISTS(
    SELECT
        1
    FROM table t
    WHERE t.id <> x.id
    AND (t.id_datetime between x.id_datetime - interval '15 minutes' AND x.id_datetime)
    AND (ST_distance((geography(ST_MakePoint(x.longitude,x.latitude))),geography(ST_MakePoint(t.longitude,t.latitude)) ) <= 1000)
)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...