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

Как да етикетирам групи в postgresql, когато принадлежността на групата зависи от предходния ред?

„Избиране в рамките на избрано“ по-често се нарича "подизбор" или "подзаявка". Във вашия конкретен случай това е свързана подзаявка . LATERAL присъединяванията (нови в postgres 9.3) могат до голяма степен да заменят корелирани подзаявки с по-гъвкави решения:

Не мисля, че имате нужда от двете тук.

За вашиятпърви случай тази заявка обаче вероятно е по-бърза и по-проста:

SELECT date, max(value) OVER (PARTITION BY grp) AS value
FROM  (
   SELECT *, count(value) OVER (ORDER BY date) AS grp
   FROM   test_fill_null
   ) sub;

count() брои само ненулеви стойности, така че grp се увеличава с всяка ненулева value , като по този начин формират групи по желание. Тривиално е да изберете един ненулева value за grp във външния SELECT .

За вашият втори случай , ще приема, че първоначалният ред на редовете се определя от (id1, id2, tms) както е посочено в едно от вашите запитвания.

SELECT id1, id2, tms
     , count(step) OVER (ORDER BY id1, id2, tms) AS group_id
FROM  (
   SELECT *, CASE WHEN lag(tms, 1, '-infinity') OVER (PARTITION BY id1 ORDER BY id2, tms)
                       < tms - interval '5 min'
                  THEN true END AS step
   FROM   table0
   ) sub
ORDER  BY id1, id2, tms;

Адаптирайте се към вашата действителна поръчка. Едно от тях може да го покрие:

PARTITION BY id1 ORDER BY id2  -- ignore tms
PARTITION BY id1 ORDER BY tms  -- ignore id2

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. Най-добри практики за обработка на релации между таблици в Spring Data R2dbc

  2. Клас на JPA модел за поле TIMESTAMP БЕЗ ЧАСОВА ЗОНА ПО ПОДРАЗБИРАНЕ CURRENT_TIMESTAMP в Postgres?

  3. Как да се свържете с отдалечена база данни PostgreSQL чрез SSL с Python

  4. currval все още не е дефиниран тази сесия, как да получите последователности от много сесии?

  5. pgAdmin III Защо резултатите от заявката се съкращават?