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 函数计算它们之间的球面距离(单位:米)。
相关推荐
lsc_blog1 天前
年终自评别贴提交记录,把技术产出讲成变化
数据库·面试·职场和发展·跳槽·求职招聘
FungLeo1 天前
成为全栈·基础补充·数据库迁移与事务:数据结构怎样安全演进
mysql·postgresql·sqlite·数据一致性·数据库事务·数据库迁移·成为全栈
Zan1 天前
SQLite + SQLx 实战:为什么已经发布的数据库迁移文件,绝对不能再修改?
数据库·后端·面试
这个DBA有点耶1 天前
数据同步的三个工程底线:DDL同步、断点续传、一致性校验——开源CDC的边界与KFS的路径
数据库·dba·代码规范
aiks_yuan1 天前
MySQL GROUP BY 很慢怎么优化:加了索引反而从 1 秒变 7 秒,Using temporary 该不该消(MySQL 8.2 实测 400 万行)
mysql
SelectDB1 天前
列式存储为什么适合分析类负载?原理、限制与日志场景应用
数据库
数据库小学妹1 天前
MySQL大字段治理:行溢出机制、覆盖索引与拆表
数据库·mysql·性能优化
爱吃奥利奥_wen1 天前
SQL Server 基础语法详解:从建库建表到约束与增删改查
服务器·数据库·oracle
这个DBA有点耶1 天前
MySQL 8.0不可见索引:删索引怕出事,不删又拖慢写入——中间态怎么用?
数据库·mysql·代码规范