1

私はSQLを持っています:

SELECT osm_id, vertex_id
   FROM ways
   JOIN
   (SELECT * FROM shortest_path('
      SELECT gid AS id, 
          source::int4 AS source, 
          target::int4 AS target, 
          length::float8 AS cost
      FROM ways',
      7856,
      18774,
      false,
      false)) AS route
   ON
   ways.gid = route.edge_id 
   order by vertex_id   

次のようなものが生成されます。

osm_id;vertex_id
5024380;6223
5024380;6224
5024380;6225
5024380;6226
175339584;6227
5024380;6230
5024380;6231
5024380;6232
38521651;6233
5024380;6234

osm_id が一意ではないことがわかります。によってosm_id注文されましたvertex_idosm_idによって注文された一意の値のみを取得する方法vertex_idvertex_idコラムはいらない。のみ必要ですosm_id。句を試しgroup byましたが、うまくいきません。次のクエリ:

SELECT distinct osm_id
   FROM ways
   JOIN
   (SELECT * FROM shortest_path('
      SELECT gid AS id, 
          source::int4 AS source, 
          target::int4 AS target, 
          length::float8 AS cost
      FROM ways',
      7856,
      18774,
      false,
      false)) AS route
   ON
   ways.gid = route.edge_id 
   --group by osm_id
   order by vertex_id 

エラーが発生します:

ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 21:    order by vertex_id 
                     ^

********** Error **********

ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
SQL state: 42P10
Character: 420
4

1 に答える 1

1

これを試して:

SELECT osm_id
   FROM ways
   JOIN
   (SELECT * FROM shortest_path('
      SELECT gid AS id, 
          source::int4 AS source, 
          target::int4 AS target, 
          length::float8 AS cost
      FROM ways',
      7856,
      18774,
      false,
      false)) AS route
   ON
   ways.gid = route.edge_id 
   GROUP BY osm_id
   ORDER BY min(vertex_id) 
于 2013-03-09T14:18:15.007 に答える