यद्यपि आप स्वयं अपने प्रश्न को हल करने में कामयाब रहे, यहां एक उपाय है जो विंडो फ़ंक्शंस का उपयोग नहीं करता है, अर्थात् lag()
या lead()
. up_date
. के बीच अंतर की तुलना करने के लिए लगातार समस्या लॉग के टाइमस्टैम्प आप स्वयं शामिल हो सकते हैं। SQL में क्वेरी कुछ इस तरह दिख सकती है
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 );
और SQLAlchemy में भी ऐसा ही 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)))