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 函数计算它们之间的球面距离(单位:米)。
相关推荐
SAP上海工博云署12 分钟前
2026年中小企业SAP服务商选型技术解析
大数据·运维·数据库·人工智能·信息可视化·运维开发·信息与通信
RestCloud13 分钟前
版本迭代丨谷云科技ETLCloud V4.2版本更新速览
数据库·doris·etl·etlcloud·数据集成平台·datahub·ftp处理
Adair_z23 分钟前
[SEO艺术重读] 第13篇 SEO教育与研究
java·网络·数据库
不爱吃糖の糖糖27 分钟前
RAG 04:向量数据库与索引算法
数据库·算法
逍遥德30 分钟前
PostgreSQL --- JSON 函数详解
数据库·sql·postgresql·json
Larcher30 分钟前
后续:上次的优化又崩了?这次是 SQLite WAL 把 Codex 直接卡死了
数据库·人工智能·github
小马爱打代码35 分钟前
MySQL高可用与扩展:主从复制、读写分离、分库分表
服务器·数据库·mysql
m0_7408596236 分钟前
Docker安装常见数据库命令汇总(2026)
数据库·docker·容器
IT策士39 分钟前
第16篇 实战:用 Docker Compose 编排 WordPress 与 MySQL
mysql·docker·容器
j7~41 分钟前
【MYSQL】 复合查询--详解(重点)
数据库·mysql·子查询·多表查询·自链接·合并查询