Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle/Sybase SQL — uzyskaj wartość na podstawie poprzedniego rekordu (nie zwykłą LAG)

Jednym ze sposobów na to jest zagnieżdżone funkcje rankingu. Najpierw przypisz stałą wartość do wszystkiego, co otrzymuje jedną wartość (używając max() over ), a następnie użyj tego jako partycji.

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. nhibernate, wywołaj funkcję w Oracle, która zwraca refcursor sys

  2. PLSQL JDBC:Jak uzyskać identyfikator ostatniego wiersza?

  3. Delphi - zapobiegaj wstrzykiwaniu SQL

  4. ORA-00904:nieprawidłowy identyfikator

  5. Wstaw wiele rekordów w Oracle