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 函数计算它们之间的球面距离(单位:米)。
相关推荐
Leo.yuan8 分钟前
2026企业级数据集成平台市场报告:国内外厂商格局与技术路线
数据库·oracle
guo_wen_qiang23 分钟前
云服务器mysql分库分表环境搭建(2库4表)
数据库·mysql·docker
jianpeng的工程笔记25 分钟前
EL8 / EL9 安装 Slurm 26.05.4:主备控制器、MariaDB 记账与作业验收
linux·数据库·mariadb·高性能计算·slurm
SelectDB技术团队36 分钟前
ClickHouse 存日志的能力边界:并发、检索与 trace 回放的实测对照
数据结构·数据库·clickhouse·日志分析·apache doris·日志存储
倔强的小石头_1 小时前
Ubuntu部署Prometheus与Alertmanager:systemd配置、告警对接及cpolar远程访问
数据库·ubuntu·prometheus
茉莉玫瑰花茶1 小时前
GO [ 接口 ]
服务器·数据库·golang
babe小鑫1 小时前
金融工程专业秋招:金融类证书与数据分析类证书的搭配方案
大数据·数据库·人工智能
User_芊芊君子2 小时前
数据库手记:从数据建模到 Spark 对接的实测记录
大数据·数据库·spark
꯭自꯭闭꯭2 小时前
DM主备集群以及读写分离集群搭建
linux·运维·数据库