Mysql 如何获得过期和未过期的数量?
我把过期药品的数量减去实际库存。我使用这个Mysql 如何获得过期和未过期的数量?,mysql,Mysql,我把过期药品的数量减去实际库存。我使用这个(IFNULL(tbl_medicine.quantity-SUM(tbl_received.received_quantity),0)作为总计和DATE(NOW())>tbl_received.expiration_DATE来获取过期药品的日期。我的问题是我无法得到尚未过期的数量。如何获得过期药品的未过期数量?有人能帮我解决我的问题吗?这是我的疑问 SELECT tbl_med.sup_med_id, tbl_med.quantity, tbl_r
(IFNULL(tbl_medicine.quantity-SUM(tbl_received.received_quantity),0)作为总计和DATE(NOW())>tbl_received.expiration_DATE
来获取过期药品的日期。我的问题是我无法得到尚未过期的数量。如何获得过期药品的未过期数量?有人能帮我解决我的问题吗?这是我的疑问
SELECT tbl_med.sup_med_id, tbl_med.quantity,
tbl_received.received_quantity, tbl_med.status,
(IFNULL(tbl_med.quantity - SUM(tbl_received.received_quantity),0)) AS Total
FROM
tbl_med
INNER JOIN
tbl_received ON tbl_received.sup_med_id = tbl_med.sup_med_id
WHERE
tbl_med.status = 'Active' AND DATE(NOW()) > tbl_received.expiration_date AND
tbl_med.barangay_id = 19
GROUP BY
sup_med_id HAVING Total > 0
ORDER BY
sup_med_id
以上查询的输出
sup_med_id quantity received_quantity status Total
3 1800 1000 Active 800
7 1800 1000 Active 800
tbl\U med和tbl\U接收表
id sup_med_id received_quantity expiration_date
1 3 1000 2019-09-04
2 7 1000 2019-09-04
3 9 1800 2022-09-04
medicine_id sup_med_id quantity status barangay_id
1 3 1800 Active 19
2 7 1800 Active 19
3 9 1800 Active 19
我希望这一切发生
sup_med_id quantity received_quantity status Total
3 1800 1000 Active 800
7 1800 1000 Active 800
9 1800 1800 Active 1800
如果药品尚未过期,我只想将数量显示为总计问题来自于您仅在过期日期已过时才加入的事实。为解决此问题,应从WHERE
子句中删除检查,改为在过期数量的总和中进行检查:
SELECT tbl_med.sup_med_id, tbl_med.quantity,
tbl_received.received_quantity, tbl_med.status,
(tbl_med.quantity
- SUM(CASE WHEN NOW() > tbl_received.expiration_date
THEN tbl_received.received_quantity
ELSE 0
END)
) AS Total
FROM
tbl_med
INNER JOIN
tbl_received ON tbl_received.sup_med_id = tbl_med.sup_med_id
WHERE
tbl_med.status = 'Active' AND
tbl_med.barangay_id = 19
GROUP BY
sup_med_id HAVING Total > 0
ORDER BY
sup_med_id
我自己还没有测试过这个查询,但我相信它应该能够实现您想要的功能。问题在于,您只有在过期日期已过时才加入。为解决此问题,应从WHERE
子句中删除检查,改为在过期数量的总和中进行检查:
SELECT tbl_med.sup_med_id, tbl_med.quantity,
tbl_received.received_quantity, tbl_med.status,
(tbl_med.quantity
- SUM(CASE WHEN NOW() > tbl_received.expiration_date
THEN tbl_received.received_quantity
ELSE 0
END)
) AS Total
FROM
tbl_med
INNER JOIN
tbl_received ON tbl_received.sup_med_id = tbl_med.sup_med_id
WHERE
tbl_med.status = 'Active' AND
tbl_med.barangay_id = 19
GROUP BY
sup_med_id HAVING Total > 0
ORDER BY
sup_med_id
我自己还没有测试过这个查询,但我相信它应该可以达到您想要的效果如果您想得到过期和未过期的,只需删除只过滤过期的条件即可设置rid of和DATE(NOW())>tbl_received.expiration_date
@Barmar即使药品还没有过期,问题也在负值中…如果您想获得过期和未过期的药品,只需删除仅过滤过期药品的条件即可摆脱和日期(NOW())>tbl_已收到。过期日期
@Barmar问题还在于,即使药品尚未过期…很高兴我能帮上忙!很高兴我能帮忙!