我有一个包含列“排名(如 ID)”、“纬度”、“经度”的表格。现在我的选择是这样的:
Rank Latitude Longitude Latitude_current_row_plus_next Longitude_current_row_plus_next
1 5 3 11 --5+6 7 --3+4
2 6 4 7 --6+1 6 --4+2
3 1 2 6 --1+5 7 --2+5
4 5 5 .. ..
.. .. .. .. ..
我期望得到什么:
Rank Latitude Longitude Latitude_current_row_minus_next Longitude_current_row_minus_next
1 5 3 1 --abs(5-6) 1 --abs(3-4)
2 6 4 5 --abs(6-1) 2 --abs(4-2)
3 1 2 4 --abs(1-5) 3 --abs(2-5)
4 5 5 .. ..
.. .. .. .. ..
如何更改代码以使用减法而不是求和?
我需要从当前值中减去下一行的值。然后在result中添加ABS函数
SELECT a.rank,a.latitude,a.longitude,
(SELECT SUM(latitude) FROM temp
WHERE rank <= a.rank + 1 AND rank >= a.rank) as latitude_current_row_plus_next,
(SELECT SUM(longitude) FROM temp
WHERE rank <= a.rank+1 AND rank >= a.rank) as longitude_current_row_plus_next
FROM temp a;
谢谢你。
最佳答案
您需要 lead()
函数,但 MySQL 中没有。
我建议使用 left join
:
select t.*,
abs(t.latitude - tnext.latitude) as lat_diff,
abs(t.longitude - tnext.longitude) as lng_diff
from temp t left join
temp tnext
on t.rank = tnext.rank - 1;
关于MySQL 如何在求和中使用减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50666800/