PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да преброя всички свързани възли (редове) в графика на Postgres?

Можете да използвате рекурсивен cte:

with recursive t(account_id, device_id) as (
       select 1, 10 union all
       select 1, 11 union all
       select 1, 12 union all
       select 2, 10 union all
       select 3, 11 union all
       select 3, 13 union all
       select 3, 14 union all
       select 4, 15 union all
       select 5, 15 union all
       select 6, 16
     ),
     a as (
      select distinct t.account_id as a, t2.account_id as a2
      from t join
           t t2
           on t2.device_id = t.device_id and t.account_id >= t2.account_id
     ),
     cte as (
      select a.a, a.a2 as mina
      from a
      union all
      select a.a, cte.a
      from cte join
           a
           on a.a2 = cte.a and a.a > cte.a
     )
select grp, array_agg(a)
from (select a, min(mina) as grp
      from cte
      group by a
     ) a
group by grp;

Тук е SQL Fiddle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се свърже с postgres от отдалечен хост

  2. Синтактична грешка на PostgreSQL в параметризирана заявка на дата $1

  3. Как да дефинирам последователността, която да използвам при създаване на таблица в миграцията на ActiveRecord в Ruby on Rails 5.2?

  4. Как да защитите своята PostgreSQL база данни - 10 съвета

  5. Docker - приложението Rails не може да се свърже със свързания контейнер на Postgres (изглежда не работи)