JOIN的时候按t1.t < t2.t做关联,会不会有问题
时间: 2024-02-09 16:12:39 浏览: 108
apriori关联分析matlab实现.doc
您提出的问题是正确的,我在之前的回答中确实忽略了这一点。如果我们只是简单地按`t1.t < t2.t`进行自连接,那么我们可能会得到重复的结果,因为同一个点可能会有多个邻近点,从而导致速度被多次计算。因此,我们需要对查询进行进一步的修改。
一种可行的方法是使用`ROW_NUMBER()`函数来为每个时间戳编号,然后根据编号进行自连接。这样可以确保每个点只会被连接到其之后的第一个邻近点。以下是修改后的查询:
```sql
SELECT
t1.t AS start_time,
t2.t AS end_time,
SQRT(POWER(t2.x - t1.x, 2) + POWER(t2.y - t1.y, 2)) / (t2.t - t1.t) AS speed
FROM
(SELECT *, ROW_NUMBER() OVER (ORDER BY t) AS rn FROM coordinates) t1
JOIN
(SELECT *, ROW_NUMBER() OVER (ORDER BY t) AS rn FROM coordinates) t2
ON
t1.rn = t2.rn - 1
ORDER BY
start_time,
end_time;
```
在上面的查询中,我们首先使用了两个子查询`t1`和`t2`,它们分别对原始表进行了编号,编号方式与时间戳`t`有关。然后,我们将`t1`和`t2`按行号进行自连接,以确保每个点只会连接到其之后的第一个邻近点。最后,我们按起始时间和结束时间对结果进行排序。
这个查询会比之前的查询略微复杂一些,但是可以更准确地计算速度,避免了重复计算的问题。
阅读全文