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

Oracle / Sybase SQL - lấy giá trị dựa trên bản ghi trước đó (không phải LAG đơn giản)

Một cách để làm điều này là sử dụng các hàm xếp hạng lồng nhau. Đầu tiên, chỉ định một giá trị không đổi cho mọi thứ nhận một giá trị (sử dụng max() over ) và sau đó sử dụng nó làm phân vùng.

select t.Invoice_Id, t.Invoice_Line, t.Kit_Flag, t.Part_Number,
       max(KitPart) over (partition by invoice_id, KitNum) as Parent_Part
from (select t.*,
             sum(isKit) over (partition by InvoiceId order by InvoiceLine) as KitNum
      from (select t.Invoice_Id, t.Invoice_Line, t.Kit_Flag, t.Part_Number,
                   (case when Kit_Flag = 'K' then 1 else 0 end) as IsKit,
                   (case when Kit_Flag = 'K' then Part_Number end) as KitPart
            from Invoice_Data t
           ) t
     ) t



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00119:thông số kỹ thuật không hợp lệ ORA-00132:lỗi cú pháp

  2. JProgressBar không cập nhật, không thể tìm thấy manh mối

  3. java.lang.ArithmeticException khi cố gắng lấy kết nối trong Oracle 11.2.0.2.0 (64 bit)

  4. đọc 1kb đầu tiên của một đốm màu từ oracle

  5. Cập nhật cột với các giá trị từ một cột khác