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

cách lấy kết quả này bằng cách sử dụng truy vấn oracle trong cấu trúc phân cấp

Tôi nghĩ rằng tôi đã quản lý để làm điều này với các chức năng phân tích (không phải là trang nhã, nhưng dù sao) -

with
grps as(
    select marker
    from(
        select collateral_num,
               loan_num,
               rownum as marker,
               case when lead(loan_num,1) over (order by collateral_num) <> loan_num
                         and lead(collateral_num,1) over (order by collateral_num) <> collateral_num
                    then 1
                    when lead(loan_num,1) over (order by collateral_num) is null
                    then 1
                    else null end as grp
          from  loan
         order by collateral_num
        )
    where grp is not null
       )
, marked as(
    select loan.*, grps.*, row_number() over(partition by marker order by collateral_num) as splitter
    from loan, grps
           )
select  collateral_num,
        min(collateral_num) over (partition by marker) as min_collateral_num,
        loan_num
from    marked y
where   splitter <= marker
    and (splitter > (select max(x.marker) from marked x where x.marker < y.marker)
     or marker = (select min(marker) from marked))

Xem sqlfiddle tại http://sqlfiddle.com/#!4/cfb1a7/40/ 0




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa SQL Server và Oracle 'Người dùng'

  2. Bảng tạm thời trong Oracle?

  3. Oracle 12.2.0.1 sắp ra mắt vào năm 2016

  4. Kết hợp dữ liệu từ 5 bảng mà không có giá trị trùng lặp và nhận kết quả với trạng thái tùy chỉnh trong Oracle 10g

  5. Tạo CTE trong Oracle