sql >> Databasteknik >  >> RDS >> Sqlserver

SQL är det möjligt att jämföra beställningar per timme och ta bort aktuellt lager?

Jag har inte SQL Server till hands och SQLFiddle har inte spelat bra med mig på sistone, så det här är oprövat, men logiken borde fungera...

WITH
    stock_changes
AS
(
    SELECT Supplier, Destination, Req_Time, Prd_Code, Prd_Description, -Qty AS Qty FROM orders
    UNION ALL
    SELECT Supplier, NULL, '00:00', Prd_Code, Prd_Desc, Stock FROM stock
),
    stock_post_order
AS
(
    SELECT
        *,
        SUM(Qty) OVER (PARTITION BY Supplier, Prd_Code
                           ORDER BY Req_Time
                               ROWS UNBOUNDED PRECEDING
                      )
                         AS new_qty
   FROM
       stock_changes
)
SELECT
    *,
    CASE WHEN new_qty > qty THEN new_qty ELSE qty END   AS order_shortfall
FROM
    stock_post_order
WHERE
    new_qty < 0

Invertera först dina beställningskvantiteter till att vara negativa, så att de är det belopp som lagernivåerna kommer att ändras med.

Förena sedan dina lagernivåer till beställningarna, med en nödvändig tid på 0 (för att göra det lite som en beställning som levererar lager snarare än tar lager, och kommer före alla dina andra beställningar) .

Räkna sedan ut vad den totala återstående kvantiteten av en produkt är efter en beställning; genom att summera alla föregående rader (i tidsordning) för den produkten. (Ge Stock - Order1 - Order2, etc, etc )

Välj sedan de rader där den nya lagernivån har blivit negativ.



  1. mysql-connector python 'IN'-operator lagrad som lista

  2. Hur skulle jag söka efter text som innehåller emojis?

  3. R och MySQL - kontrollera om en rad finns i en tabell innan du skriver till den med dbWriteTable()

  4. Gå med i tabeller med LIKE (SQL)