附近的人計算方法-----使用mysql指令碼計算方法,-----mysql

來源:互聯網
上載者:User

附近的人計算方法-----使用mysql指令碼計算方法,-----mysql

附近的人計算方法drop  function if exists getDistance;DELIMITER $$  CREATE DEFINER=`root`@`localhost` FUNCTION `getDistance`(     lon1 float(10,7)     ,lat1 float(10,7)    ,lon2 float(10,7)     ,lat2 float(10,7)) RETURNS doublebegin    declare d double;    declare radius int;    set radius = 6378140; #假設地球為正球形,直徑為6378140米    set d = (2*ATAN2(SQRT(SIN((lat1-lat2)*PI()/180/2)           *SIN((lat1-lat2)*PI()/180/2)+           COS(lat2*PI()/180)*COS(lat1*PI()/180)           *SIN((lon1-lon2)*PI()/180/2)           *SIN((lon1-lon2)*PI()/180/2)),           SQRT(1-SIN((lat1-lat2)*PI()/180/2)           *SIN((lat1-lat2)*PI()/180/2)           +COS(lat2*PI()/180)*COS(lat1*PI()/180)           *SIN((lon1-lon2)*PI()/180/2)           *SIN((lon1-lon2)*PI()/180/2))))*radius;    return d;end$$DELIMITER ; select getDistance(116.3899,39.91578,116.3904,39.91576);


怎用mysql實現計算上下兩條記錄的差

方法挺多的,很多是採用排序直接對等串連,這樣對於主鍵叢集索引比較快的。
----
我提供的不是排序對等 方式,而是大範圍串連檢索最小距離的方式。

SELECT
A.FID,A.Fnum,MIN(A.Fid-B.Fid) as 差值
FROM test.cte A
INNER JOIN test.cte B on(A.FID>B.FID)
GROUP BY A.FID,A.Fnum
ORDER BY A.Fid Desc

---
執行結果:
FID Fnum 差值
-------------------------
'9323', '10', '14'
'9309', '10', '1'
'9308', '10', '47'
'9261', '10', '31'
'9230', '10', '23'
'9207', '10', '16'
'9191', '10', '26'
'9165', '10', '14'
 
mysql命令列工具怎執行指令檔?

第一種方法:
在命令列下(未串連資料庫),輸入 mysql -h localhost -u root -p123456 < F:\hello world\niuzi.sql (注意路徑不用加引號的!!) 斷行符號即可.
第二種方法:
在命令列下(已串連資料庫,此時的提示符為 mysql> ),輸入 source F:\hello world\niuzi.sql (注意路徑不用加引號的) 或者 \. F:\hello world\niuzi.sql (注意路徑不用加引號的) 斷行符號即可
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.