Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

समय के आधार पर दो तालिकाओं को मिलाएं

मैं आपकी क्वेरी को किसी प्रकार की अंतराल-और-द्वीप समस्या के रूप में समझता हूं।

मैं इसे union . द्वारा हल करूंगा दोनों तालिकाओं में, फिर समूहों की पहचान करने के लिए एक विंडो योग करना:हर बार एक लॉगिन पूरा होने पर, एक नया समूह शुरू होता है। अंतिम चरण समूह द्वारा एकत्रित करना है।

select
    id,
    min(case when action = 'in'  then dt end) login_time,
    max(case when action = 'out' then dt end) logout_time
from (
    select
        t.*,
        sum(case when action = 'in' then 1 else 0 end)
            over(partition by id order by dt) grp
    from (
        select id, login_time dt, 'in' action from login
        union all select id, logout_time, 'out' from logout
    ) t
) t
group by id, grp
order by id, grp

DB Fiddle पर डेमो :

ID | LOGIN_TIME                      | LOGOUT_TIME                    
-: | :------------------------------ | :------------------------------
 1 | 19-DEC-19 03.59.33.637000000 AM | 19-DEC-19 04.34.22.535000000 AM
 2 | 19-DEC-19 06.58.16.318000000 AM | 19-DEC-19 07.52.21.568000000 AM
 2 | 19-DEC-19 10.19.26.039000000 AM | null                          
 2 | 19-DEC-19 10.26.03.411000000 AM | null                          
 2 | 19-DEC-19 01.35.56.006000000 PM | 19-DEC-19 02.06.13.585000000 PM


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओरेकल में राउनम की तरह मैसकल में पंक्ति संख्या प्राप्त करने का कोई तरीका है?

  2. क्वेरी Oracle 11g पर काम करती है लेकिन Oracle 8i पर विफल हो जाती है

  3. संख्या डेटा प्रकार के लिए Oracle स्टोर अनुगामी शून्य करता है?

  4. वैकल्पिक सत्र सेट nls_date_format एपेक्स में काम नहीं करता है। हालाँकि SQL डेवलपर में काम करता है

  5. c3p0 को हाइबरनेट में पुराने डीबी कनेक्शन को ऑटो-रीफ्रेश करने के लिए कैसे कॉन्फ़िगर करें