mysql 算一堆经纬度的距离总长

使用窗口函数 LAG() (推荐,适用于 MySQL 8.0+)

如果你的 MySQL 版本是 8.0 或更高,使用 LAG() 窗口函数是更优雅和高效的选择。LAG() 可以直接访问当前行之前的行数据。

SELECT ROUND(SUM(segment_distance), 2) AS total_distance_meters FROM ( SELECT ST_Distance_Sphere( POINT(longitude, latitude), POINT(LAG(longitude) OVER (ORDER BY id), LAG(latitude) OVER (ORDER BY id)) ) AS segment_distance FROM track_points ) AS distances;说明:

  1. LAG(column) OVER (ORDER BY id) : 这个函数会返回当前行按 id 排序的前一行的 column 值。LAG(longitude) 就是获取前一个点的经度。
  2. 计算分段距离 :在内层查询中,我们为每一行计算它与前一行的距离。第一行由于没有前一行,LAG() 返回 NULL,其距离也为 NULL,在 SUM 时会被自动忽略。
  3. 求和 :外层查询对所有非 NULL 的分段距离进行求和。
  4. 计算分段距离 (ST_Distance_Sphere) :对每一对相邻的点,使用 ST_Distance_Sphere 函数计算它们之间的球面距离(单位:米)。
相关推荐
WiChP1 小时前
【V0.1B8】从零开始的2D游戏引擎开发之路
服务器·数据库·mysql
米粒11 小时前
力扣算法刷题 Day 63 Bellman_ford 算法
数据库·算法·leetcode
杨云龙UP9 小时前
SQL Server2022部署:Windows Server 2016下安装、SSMS配置、备份还原与1433端口放通全流程_20260508
运维·服务器·数据库·sql·sqlserver·2022
墨染天姬11 小时前
【AI】cursor提示词小技巧
前端·数据库·人工智能
古月-一个C++方向的小白11 小时前
MySQL数据库——数据类型
android·数据库·mysql
qq_4135020212 小时前
如何创建CDB公共用户_C##前缀强制规则与CONTAINER=ALL
jvm·数据库·python
逸Y 仙X12 小时前
文章二十七:ElasticSearch ES查询模板(Search Template)高效复用实战
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
m0_7381207212 小时前
应急响应(重点)——记一次某公司流量应急溯源分析(附带下载链接)
服务器·前端·数据库·安全·web安全·网络安全
yexuhgu12 小时前
CSS如何利用-checked实现纯CSS手风琴折叠_通过状态选择器控制区域高度
jvm·数据库·python