繁体   English   中英

选择订购商品的日期SQL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM