sql >> Database >  >> RDS >> Sqlserver

SQL Totale bestellingen per uur vergelijken en huidige voorraad verwijderen Mogelijk?

Ik heb geen SQL Server bij de hand en SQLFiddle speelt de laatste tijd niet goed met me, dus dit is niet getest, maar de logica zou moeten werken...

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

Keer eerst uw bestelhoeveelheden om zodat ze negatief zijn, zodat ze het bedrag zijn waarmee de voorraadniveaus zullen veranderen.

Verbind vervolgens uw voorraadniveaus met de bestellingen, met een vereiste tijd van 0 (om het een beetje te laten lijken op een bestelling die voorraad levert in plaats van inventariseert, en vóór al uw andere bestellingen komt) .

Bereken vervolgens wat de totale resterende hoeveelheid van een product is na een bestelling; door alle voorgaande rijen (in tijdsvolgorde) voor dat product op te tellen. (Geef Stock - Order1 - Order2, etc, etc )

Selecteer vervolgens de rijen waar het nieuwe voorraadniveau negatief is geworden.



  1. MySQL:verwijder alle rijen ouder dan 10 minuten

  2. Kunt u binnen één instructie toegang krijgen tot de waarde voor automatisch verhogen in MySQL?

  3. Veroorzaakt door:android.database.sqlite.SQLiteException:geen dergelijke tabel:(code 1) Android

  4. Het beste uit PostgreSQL-logboeken halen