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 函数计算它们之间的球面距离(单位:米)。
相关推荐
y = xⁿ2 小时前
MySQL:count(1)与count(*)有什么区别,深分页问题
android·数据库·mysql
苏渡苇2 小时前
5 分钟跑起 Redis(Docker 版)
数据库·redis·缓存·docker·redis入门
m0_493934532 小时前
Go语言中 & 与 - 的本质区别及指针使用详解
jvm·数据库·python
gjc5922 小时前
踩坑案例:容器方式部署的MySQL无法访问?
数据库·mysql
Greyson12 小时前
Redis如何解决哨兵通知延迟问题_优化客户端连接池动态刷新拓扑的订阅监听机制
jvm·数据库·python
bekote2 小时前
笔记|数据库
数据库·笔记
Dream of maid2 小时前
Mysql(8)约束
数据库·mysql
锦轩韶华3 小时前
MySQL 5.1.73(winx64)安装、Navicat 数据库连接测试及简单数据库sql语句操作记录
mysql
程序边界3 小时前
KingbaseES 表空间目录自动创建特性深度解析(下篇)
数据库·oracle