簡體   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