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

Jak porównać 2 kolejne wartości wierszy w obiekcie wyniku za pomocą Pythona?

Chociaż sam udało ci się rozwiązać swoje pytanie, oto jedno podejście, które nie używa funkcji okna, a mianowicie lag() lub lead() . Aby porównać różnice między up_date znaczniki czasu kolejnych dzienników problemów, do których można się dołączyć. W SQL zapytanie może wyglądać tak

select    ilx.id
from      issue_logs ilx
join      rt_status rsx on rsx.id = ilx.to_status
left join issue_logs ily on  ily.from_status = ilx.to_status
                         and ily.issue_id = ilx.issue_id
where     ilx.up_date >= '2018-09-06T16:34'
and       ilx.up_date <= ( coalesce(ily.up_date, '2018-09-14T12:27') -
                           interval '1 minute' * rsx.duration_in_min );

i to samo w SQLAlchemy języku wyrażeń SQL :

from_datetime = '2018-09-06T16:34'
to_datetime = '2018-09-14T12:27'

ilx = issue_status_logs.alias()
ily = issue_status_logs.alias()
rsx = rt_status

query = select([ilx.c.id]).\
    select_from(
        ilx.
        join(rsx, rsx.c.id == ilx.c.to_status).
        outerjoin(ily, and_(ily.c.from_status == ilx.c.to_status,
                            ily.c.issue_id == ilx.c.issue_id))).\
    where(and_(ilx.c.up_date >= from_datetime,
               ilx.c.up_date <= (func.coalesce(ily.c.up_date, to_datetime) -
                                 cast('1 minute', Interval) *
                                 rsx.c.duration_in_min)))


  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 wstawia lub aktualizuje wyzwalacz WHEN (stary)

  2. upuść db w postgresie

  3. Połączenie Postgres JDBC w Eclipse Help

  4. Jak używać struktury danych pierścienia w funkcjach okien

  5. Zakres Rails - gdzie w dokładnych dopasowaniach