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

Извличане на редове въз основа на условие

Има две причини row y не се връща се дължи на условието:

  • b.start > a.start означава, че ред никога няма да се съедини със себе си
  • GROUP BY ще върне само един запис на APP_nm стойност, но всички редове имат една и съща стойност.

Има обаче допълнителни логически грешки в заявката, които няма да бъдат обработени успешно. Например, как знае кога започва "нова" сесия?

Логиката, която търсите, може да бъде постигната в нормален PostgreSQL с помощта на DISTINCT ON функция, която показва един ред на входна стойност в конкретна колона. Въпреки това, DISTINCT ON не се поддържа от Redshift.

Някои потенциални решения:DISTINCT ON like функционалност за Redshift

Резултатът, който търсите, би бил тривиален при използване на език за програмиране (който може да преминава през резултатите и да съхранява променливи), но е труден за прилагане към SQL заявка (която е проектирана да работи с редове с резултати). Бих препоръчал да извлечете данните и да ги стартирате чрез прост скрипт (напр. в Python), който след това може да изведе началните и крайните комбинации, които търсите.

Това е отличен случай за използване на функция за поточно предаване на Hadoop , които успешно съм прилагал в миналото. Той ще приеме записите като вход, след това ще „запомни“ началния час и ще изведе запис само когато е изпълнена желаната крайна логика.



  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 с оператор if

  2. SQL команда за спиране на задание в pgAdmin 4

  3. AFTER LOGON(Oracle) тригер в PostgreSQL с разширение – login_hook

  4. Създаване на бази данни в SQLAlchemy тестове с PostgreSQL

  5. jOOQ вмъкнете в .. където не съществува за Postgres