我在做药店的盘存系统。现在我正试着把药过期。我想给你看我的桌子。也许你知道怎么修理我的桌子。我把到期日写在tbl_received_order里。当我收到一种药,它将插入tbl_medicine。如果顾客购买50片扑热息痛或supplier_med_id等于3,两个月后收到的药物就过期了。我用DATE(NOW()) > tbl_received_order.expiration_date得到所有过期的药。我的问题是,当药物过期时,qty不符合rec_qty的要求。举个例子,我有100台个人电脑。在我的初步清单上。但后来,有50台电脑。被卖掉了。为什么100 pcs.is仍然在思考我的过期药品清单,而不是50 for。我怎么收拾我的桌子?有人能帮我解决我的问题吗?
这是我的桌子
tbl_medicine
med_id supplier_med_id qty status branch_id
1 3 50 Active 1
2 7 100 Active 1
3 9 100 Active 1tbl_received_order
received_id user_id purchase_order_id date_received
RO20190001 1 PO20190001 2019-05-04tbl_received_order_details
id received_id supplier_med_id rec_qty expiration_date
1 RO20190001 3 100 2019-11-04
2 RO20190001 7 100 2019-11-04
3 RO20190001 9 100 2019-11-04
1 RO20190002 3 50 2019-11-04
2 RO20190002 7 50 2019-11-04
3 RO20190002 9 50 2019-11-04tbl_transaction
transaction_id customer_id user_id transaction_date branch_id
0001 CU2018001 1 2019-09-04 1
0002 CU2018001 1 2019-09-04 1
0003 CU2018001 1 2019-09-04 1tbl_transaction_details
details_id transaction_id supplier_med_id qty price total_price
1 0001 3 50 10.00 500
2 0002 3 10 10.00 100
3 0003 3 10 10.00 100发布于 2019-09-08 08:44:00
您可以使用JOIN获得精确的数量。
SELECT orderd.expiration_date, orderd.rec_qty - SUM(trans.qty) AS inventory_left
FROM tbl_received_order_details AS orderd
JOIN tbl_transaction_details AS trans
ON orderd.supplier_med_id = trans.supplier_med_id
WHERE orderd.supplier_med_id = 3
AND orderd.expiration_date < '2019-11-05'使用tbl_received_order_details和tbl_transaction_details加入supplier_med_id。
用药物id '3‘和过期日期过滤记录。
由于一种特定的药物可以有超过一个交易,我们需要SUM销售的数量并从总量中减去它才能得到剩下的东西。
更新1
上述查询将得到过期的药品出售。若要获取所有库存的剩余数量,请使用GROUP BY。
SELECT orderd.expiration_date, orderd.rec_qty - SUM(trans.qty) AS inventory_left
FROM tbl_received_order_details AS orderd
JOIN tbl_transaction_details AS trans
ON orderd.supplier_med_id = trans.supplier_med_id
WHERE orderd.expiration_date < '2019-11-05'
GROUP BY orderd.supplier_med_id更新2
若要获取所有过期库存,无论是否已售出,请使用LEFT JOIN。COALESCE(trans.qty, 0)将返回第一个NOT NULL值。因此,如果一种药物从未出售,它将在transaction表中没有任何条目,它将返回qty为NULL。在这种情况下,我们将减去零从rec_qty,这反过来将得到完整的rec_qty作为左转。
SELECT orderd.expiration_date, orderd.rec_qty - SUM(COALESCE(trans.qty, 0)) AS inventory_left
FROM tbl_received_order_details AS orderd
LEFT JOIN tbl_transaction_details AS trans
ON orderd.supplier_med_id = trans.supplier_med_id
WHERE orderd.expiration_date < '2019-11-05'
GROUP BY orderd.supplier_med_idhttps://stackoverflow.com/questions/57840348
复制相似问题