sql >> データベース >  >> RDS >> Sqlserver

SQL 1時間ごとの合計注文数を比較し、現在の在庫を削除することは可能ですか?

    手元にあるSQLServerがなく、SQLFiddleが最近うまく機能していないため、これはテストされていませんが、ロジックは機能するはずです...

    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
    

    まず、注文数量を負に反転します。これにより、在庫レベルが変化する量になります。

    次に、必要な時間を0 にして、在庫レベルを注文に結合します(在庫を取得するのではなく、在庫を配達する注文のように、他のすべての注文よりも前に来るようにします)

    次に、注文後の製品の残りの合計数量を計算します。その製品の前のすべての行を(時間順に)合計します。 Stock - Order1 - Order2, etc, etc

    次に、新しい在庫レベルがマイナスになった行を選択します。



    1. モデルがわずかに変更された複数のデータベース。実行時に EF がさまざまなデータベース構造を処理できるようにするにはどうすればよいですか?

    2. ベストプラクティス:大きなフォームの値をデータベースに保存する

    3. 外部のWebサイト運営者が自分のサイトにリンクするための画像トラックバックを作成する

    4. OracleDatabaseで仮想索引を使用する方法