[英]Selecting date an item was ordered SQL
我有以下表格:
订单(orderID,日期,shipID)
运输(shipID,价格)
采购订单(产品编号,订单编号,金额)
价格(prodID,fromDate,价格)
我需要检索每个订单ID和总价格,包括订单中的商品费用+购买的运费。 物料的成本必须是订单日期而非最近日期的物料成本。 Price表存储从特定日期(fromDate属性)开始的产品的不同价格。 因此,第d天产品的价格是fromDate值f最大的条目中的价格,使得f≤d。 我拥有的代码不会返回所有orderID,而仅返回一些。 有任何想法吗?
SELECT o.orderId, SUM(pr.price) + SUM(s.price) orderCost
FROM [Order] o
INNER JOIN Shipping s ON o.shipId = s.shipId
INNER JOIN PO po ON o.orderId = po.orderId
INNER JOIN
(SELECT TOP 1 price, prodID FROM Price pr WHERE
fromDate <= (SELECT MAX([date]) FROM [Order])
) pr ON pr.prodID = po.prodID
GROUP BY o.orderId;
SELECT "Order".orderId
FROM "Order"
我怀疑您的某些商品没有shipping cost
,请改用left join
。
SELECT o.orderId, SUM(coalesce(pr.price, 0)) + SUM(coalesce(s.price, 0)) orderCost
FROM [Order] o
LEFT JOIN Shipping s ON o.shipId = s.shipId
INNER JOIN PO po ON o.orderId = po.orderId
LEFT JOIN
(SELECT TOP 1 price, prodID FROM Price pr WHERE
fromDate <= (SELECT MAX([date]) FROM [Order])
) pr ON pr.prodID = po.prodID
GROUP BY o.orderId;
在SQL Server或MySQL中,都可以使用相关的子查询。 确切的语法略有不同。 这使用SQL Server约定,因为它与您问题中的代码一致:
SELECT orderId, SUM(price) + SUM(price) as orderCost
FROM (SELECT o.*,
(SELECT TOP (1) p.Price
FROM Price p
WHERE p.prodID = po.prodID AND
p.date <= o.date
ORDER BY p.date DESC
) as price
FROM [Order] o INNER JOIN
Shipping s
ON o.shipId = s.shipId INNER JOIN
PO po
ON o.orderId = po.orderId
) o
GROUP BY orderId;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.