sql >> Databasteknik >  >> RDS >> Oracle

Oracle/Sybase SQL - få värde baserat på en tidigare post (inte en enkel LAG)

Ett sätt att göra detta är med kapslade rankningsfunktioner. Tilldela först ett konstant värde till allt som får ett värde (med max() over ) och använd sedan detta som en partition.

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. Beställning av strängarna samtidigt som man sammanfogar i orakel

  2. Välj Max Data från Subquery SQL, men det visar alla resultat från Subquery

  3. mysql:välj, infoga, ta bort och uppdatera i en fråga

  4. SQL Between-sats med strängkolumner