Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hợp nhất hai bảng dựa trên thời gian

Tôi hiểu truy vấn của bạn là một số loại vấn đề về khoảng trống và đảo.

Tôi sẽ giải quyết nó bằng union nhập cả hai bảng, sau đó thực hiện tính tổng cửa sổ để xác định các nhóm:mỗi lần đăng nhập được đáp ứng, một nhóm mới sẽ bắt đầu. Bước cuối cùng là tổng hợp theo nhóm.

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

Bản trình diễn trên DB Fiddle :

ID
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. Lỗi thời gian chạy:-2147217887 (80040e21) Hệ thống không thể tìm thấy nội dung tin nhắn cho số tin nhắn 0x80040e21 trong tệp tin nhắn cho OraOLEDB

  2. Perl DBI Error Msg:Không thể gọi phương thức selectcol_arrayref trên một giá trị không xác định

  3. Cách tham gia và giải nén trong SQL

  4. PLSQL lặp qua đối tượng JSON

  5. Làm thế nào để trích xuất các giá trị nút json có thể lặp lại một cách riêng biệt với XML bằng ORACLE SQL?