実現したいこと
person_idの座標データを書き込むテーブル(T_log)があります。
位置情報としてx座標(pos_x)、y座標(pos_y)があり、
それを使って時間経過に伴う移動距離を計算したいです。
【最終の出力イメージ】(person_idごとに距離を積算)
person_id , 距離(m)
1111 , 1.6
2222 , 10.1
3333 , 15
前提
次のようなサンプルデータがあるとします。
date_time , person_id , pos_x , pos_y
2023/5/15 8:30:02 , 1111 ,38 , 10
2023/5/15 8:40:02 , 1111 ,36 , 8
2023/5/15 8:30:07 , 2222 ,36 , 8
2023/5/15 8:30:12 , 3333 ,36 , 8
2023/5/15 8:50:17 , 3333 ,36 , 10
2023/5/15 8:50:22 , 1111 ,36 , 8
2023/5/15 8:55:27 , 3333 ,30 , 8
2023/5/15 8:55:32 , 3333 ,28 , 8
2023/5/15 8:55:37 , 3333 ,20 , 10
2023/5/15 9:00:11 , 2222 ,28 , 10
2023/5/15 9:05:11 , 2222 ,28 , 10
2023/5/15 9:20:11 , 3333 ,18 , 8
window関数を使って、person_idごとに、
1件目のpos_x,pos_yと2件目のpos_x,pos_yで、2点間の距離を計算。
以下同様に、
2件目pos_x,pos_yと3件目pos_x,pos_yを使って距離計算、
3件目pos_x,pos_yと4件目pos_x,pos_yを使って距離計算、、、、
そして以下のようなデータで出力させたいです。
person_id , date_time , pos_x , pos_y , distance
1111 ,2023/5/15 8:40:02 , 1.6
1111, 2023/5/15 8:50:22 , 0
2222 ,2023/5/15 9:00:11 , 2.1
2222 ,2023/5/15 9:05:11 , 0
3333 ,2023/5/15 8:50:17 , 2
3333 ,2023/5/15 8:55:27 , 6
3333 ,2023/5/15 8:55:32 , 2
3333 ,2023/5/15 8:55:37 , 2.1
3333 ,2023/5/15 9:20:11 , 2.87
※計算が間違っているかもしれませんが、
あくまで出力イメージになります。
ここまでできればperson_idをグループ化して、
distanceの合計を出せそうに思っております。
私のSQL文ではエラーになるようで、結果が返ってきません・・・。
発生している問題・エラーメッセージ
エラーメッセージ Error Code: 1690. BIGINT UNSIGNED value is out of range in '(((`lead(pos_x) OVER (PARTITION BY person_id ORDER BY date_time ) ` - pos_x`) ^ 2) + ((`lead(pos_y) OVER (PARTITION BY person_id ORDER BY date_time) ` - `pos_y`) ^ 2))' ### 該当のソースコード ```SQL SELECT date_time ,person_id ,pos_x ,pos_y ,sqrt( ((LEAD(pos_x) OVER (Partition by person_id ORDER BY date_time))-pos_x)^2 + ((LEAD(pos_y) OVER (Partition by person_id ORDER BY date_time))-pos_y)^2 ) AS distance FROM T_log
試したこと
Window関数を使ったことと、
2点間の距離計算の公式を使いました。
SQRT( (x2-x1)^2 + (y2-y1) ^2 )
補足情報(FW/ツールのバージョンなど)
MySQL version: 8.0.31

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/08/23 07:31