Hoewel je zelf je vraag hebt kunnen oplossen, is hier een versie die geen gebruik maakt van vensterfuncties, namelijk lag()
of lead()
. Om de verschillen tussen de up_date
. te vergelijken tijdstempels van opeenvolgende probleemlogboeken die u zelf zou kunnen verlaten. In SQL zou de query eruit kunnen zien als
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 );
en hetzelfde in SQLAlchemy SQL Expression Language :
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)))