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

Как да групирате времеви печати в острови (въз основа на произволна празнина)?

Това ще направи това:

SELECT done, count(*) FILTER (WHERE step) OVER (ORDER BY done) AS grp
FROM  (
   SELECT done
       , (lag(done) OVER (ORDER BY done) <= done - interval '2 min') AS step
   FROM   tbl
   ) sub
ORDER  BY done;

Подзаявката sub записва step като true ако предишният ред е на най-малко 2 минути - сортирано по колоната с времеви печат done в този случай.

Външната заявка добавя непрекъснат брой стъпки, ефективно номера на групата (grp ) - комбиниране на обобщения FILTER клауза с друга функция на прозореца.

db<>цигулка тук

Свързано:

  • Запитване за намиране на всички времеви печати, повече от определен интервал
  • Как да маркирам групи в postgresql, когато принадлежността към групата зависи от предходния ред?
  • Изберете най-дългата непрекъсната последователност
  • Групиране или прозорец

Относно обобщения FILTER клауза:

  • Как мога да опростя тази заявка за статистически данни за играта?
  • Условна функция за извеждане/закъснение PostgreSQL?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвам PostgreSQL контейнер със съществуващи данни?

  2. Таблица с координати на шестоъгълна мрежа, която покрива света

  3. SQL транспониране на редове като колони

  4. PostgreSQL:Как да задам search_path на потребителско ниво?

  5. Как да конвертирам дата и време в стойност на епохата на unix в Postgres?