Untitled

 avatar
unknown
mysql
2 years ago
3.6 kB
5
Indexable
SELECT 
    CURRENT_TIMESTAMP() AS logdate,
    siteflag,
    product,
    size,
    SUBSTRING_INDEX(inventoryiteminfo, '=', 1) AS serials,
    SUBSTRING_INDEX(inventoryiteminfo, '=', - 1) AS loans,
    orders,
    unsellableqty,
    sellableqty,
    quantity AS current_quantity,
    /* calculate if there's an inventory defiency:
    if 0, it means that the inventory quantity matches the physical inventory on hand
    if less than 0, it means that the inventory quantity is greater than the physical inventory on hand
    if greater than 0, it means that the inventory quantity is less than the physical inventory on hand 
    */
    ((SELECT serials) + (SELECT loans)) - (quantity + orders) AS deficiency,
    quantity + (SELECT deficiency) AS correct_quantity,
    (SELECT 
            last_update
        FROM
            inventory
        WHERE
            product = j3.product
                AND option1 = j3.size) AS inventory_lastupdate,
    (SELECT 
            MAX(last_update)
        FROM
            shipment
        WHERE
            productcode = j3.product
                AND option1 = j3.size) AS shipment_lastupdate
FROM
    (SELECT 
        j1.*,
            IFNULL(pending_orders, 0) AS orders,
            IFNULL((SELECT 
                    CONCAT(CAST(SUM(qtyonhand) AS CHAR (20)), '=', CAST(SUM(onloan) AS CHAR (20)))
                FROM
                    inventoryitem FORCE INDEX (PRODUCT)
                WHERE
                    product = j1.product AND size = j1.size), 0) AS inventoryiteminfo
    FROM
        (SELECT 
        product,
            option1 AS size,
            siteflag,
            wholesalecost,
            quantity,
            sellableqty,
            quantity - sellableqty AS unsellableqty
    FROM
        (SELECT 
        code, siteflag, wholesalecost
    FROM
        product
    WHERE
        iscurrent = 1
            AND brandname NOT IN ('Beauty Samples' , 'Gift Certificates', 'Gift Wrap', 'GRLFRND Embroidery')) t1
    JOIN inventory ON code = product
    WHERE
        last_update >= DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)
            AND sellableqty <= 20
    GROUP BY product , size) j1
    LEFT JOIN (SELECT 
        productcode, option1, COUNT(*) AS pending_orders
    FROM
        (SELECT 
        productcode,
            option1,
            IF(boxtime != '1969-12-31 16:00:00', REPLACE(serialnumber, 's', ''), '') AS serial
    FROM
        orders t0
    JOIN shipment t1 ON invoice = invoicenum
    WHERE
        t1.status IN ('ready' , 'printing', 'printed', 'picked', 'picksorted', 'verify', 'boxed', 'cant find', 'on hold', 'unvalidated', 'could not charge', 'invalid address', 'unvalidated address show reCAPTCHA')) t3
    WHERE
        IF(serial != '', (SELECT 
                qtyonhand
            FROM
                inventoryitem FORCE INDEX (SERIALNUMBER)
            WHERE
                serialnumber = serial), 1)
    GROUP BY productcode , option1) j2 ON j1.product = j2.productcode
        AND j1.size = j2.option1
    GROUP BY product , size) j3
/* if we have defiency in the inventory and there was no update in the inventory since the discrepancy was logged, this a "verified" discrepancy */ 
HAVING (deficiency < 0
    AND inventory_lastupdate < logdate)
/* Also make sure that there was no shipment update in case a pending order was completed after the order count was calcualted since this event does not trigger an inventory update, only when the order was orginally placed (reasoncode:3) or canceled etc */
    AND shipment_lastupdate < logdate
ORDER BY sellableqty
LIMIT 10000000
Editor is loading...