0
における重複のクラスタ、私は次のような結果を返す次のクエリを持っている:削除クエリ結果セット
db=# SELECT t1.id as id1, t2.id as id2
db-# FROM table_1 As t1, table_2 As t2
db-# WHERE ST_DWithin(t2.lonlat, t1.lonlat, t2.range)
db-# ORDER BY t1.id, t2.id, ST_Distance(t2.lonlat, t1.lonlat);
id1 | id2
-------+------
4499 | 1118
4500 | 1118
4501 | 1119
4502 | 1119
4503 | 1118
4504 | 1118
4505 | 1119
4506 | 1119
4507 | 1118
4508 | 1118
4510 | 1118
4511 | 1118
4514 | 1117
4515 | 1117
4518 | 1117
4519 | 1117
4522 | 1117
4523 | 1117
4603 | 1116
4604 | 1116
4607 | 1116
そして、私は結果セットは次のようになりたい:結果には、基本的に
id1 | id2
-------+------
4499 | 1118
4501 | 1119
4503 | 1118
4505 | 1119
4507 | 1118
4514 | 1117
4603 | 1116
クエリではid2
の重複が返されますが、id2
が結果に何度も出現することがありますが、ではなく、id2
がクラスタ内で重複していればではありません。
ここでは、id1
はGPS位置表のIDを表し、id2
はウェイポイントのテーブルを表しています。ウェイポイントに最も近い通過ポイントを返すクエリーが必要です(ウェイポイント# 1118が通過すると、別のウェイポイントが通過するまで、再び通過することはできません)。
Postgresを使用してこれを行う方法はありますか?
ありがとうございました - 私の最後にいくつかのメモ:1. 'id1'は本当にユニークです。 2.ウェイポイント(table_2)までの距離が10メートルの場合、例えばGPS(table_1)は、最初の通過ポイントではなく、*最も近い*通過ポイントを得るために距離計算が重要です。 )は、10m、次に6,4,2,1,3,7,9という距離のレコードを持っていて、ウェイポイントから1mのところにあるtable_1のレコードが必要です。それはあなたの答えに全く影響しますか? –
@AlexCrooks。 。 。あなたは 'id1、id2'で注文しています。私は距離がすべて考慮されているとは思わない。いずれにしても、 'lag()'の 'order by'はあなたが本当に望む' order by 'と一致するはずです。 –