PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Pobierz ścieżki z bazy danych punktów w sql

Użyj rekurencyjnego cte z array[array[source, destination]] jako kolumna agregacji:

with recursive cte(source, destination, path) as (
    select source, destination, array[array[source, destination]]
    from points
union all
    select p.source, p.destination, path || array[p.source, p.destination]
    from cte c
    join points p on c.destination = p.source
    where not array[array[p.source, p.destination]] <@ path
)
select distinct on (path[1:1]) path
from (
    select distinct on (source, destination) *
    from cte
    order by source, destination, array_length(path, 1) desc
    ) s    
order by path[1:1], array_length(path, 1) desc;

        path         
---------------------
 {{1,2},{2,3},{3,7}}
 {{5,7}}
 {{9,12}}
(3 rows)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawiać i usuwać dane w PostgreSQL

  2. PostgreSQL:Eksportuj dane z SQL Server 2008 R2 do PostgreSQL 9.5

  3. Wydajny sposób na pobieranie danych z drugiej bazy danych?

  4. Utwórz trzeci stół z dwóch stołów

  5. docker-compose rails rake db:reset nie powiedzie się, nie można usunąć aktualnie otwartej bazy danych