相关模型的动态范围,然后按距离排序
Dynamic scope on related model and then sorting by distance
我有一个 table,我在其中保存所有用户的位置日志,我需要从那里获取所有用户的最新位置,并根据与提供的几何点的距离对其进行排序。
地点table
id
user_id
location
time
1
1
POINT
timestamp
2
1
POINT
timestamp
3
2
POINT
timestamp
4
2
POINT
timestamp
结果应该是
id
user_id
location
time
2
1
POINT
timestamp
4
2
POINT
timestamp
然后我需要对距离提供点最近的用户进行排序。我知道如何使用 MySQL 空间函数来获取距离但无法使用上面的结果进行排序。
我参考了另一个堆栈溢出答案 this for getting latest location and ,但很难同时使用这两个答案。
非常感谢您的帮助并提前致谢
WITH cte AS ( SELECT source_table.*,
ROW_NUMBER() OVER (PARTITION BY source_table.user_id
ORDER BY source_table.time DESC) rn
FROM source_table )
SELECT cte.*
FROM cte
WHERE cte.rn = 1
ORDER BY ST_Distance(cte.location, @specified_point)
我有一个 table,我在其中保存所有用户的位置日志,我需要从那里获取所有用户的最新位置,并根据与提供的几何点的距离对其进行排序。
地点table
id | user_id | location | time |
---|---|---|---|
1 | 1 | POINT | timestamp |
2 | 1 | POINT | timestamp |
3 | 2 | POINT | timestamp |
4 | 2 | POINT | timestamp |
结果应该是
id | user_id | location | time |
---|---|---|---|
2 | 1 | POINT | timestamp |
4 | 2 | POINT | timestamp |
然后我需要对距离提供点最近的用户进行排序。我知道如何使用 MySQL 空间函数来获取距离但无法使用上面的结果进行排序。
我参考了另一个堆栈溢出答案 this for getting latest location and
非常感谢您的帮助并提前致谢
WITH cte AS ( SELECT source_table.*,
ROW_NUMBER() OVER (PARTITION BY source_table.user_id
ORDER BY source_table.time DESC) rn
FROM source_table )
SELECT cte.*
FROM cte
WHERE cte.rn = 1
ORDER BY ST_Distance(cte.location, @specified_point)