【问题标题】:Last Order Per Item with Price每件商品的最后订单和价格
【发布时间】:2015-04-24 15:31:06
【问题描述】:

我使用 Microsoft SQL,更具体地说,使用 LinnWorks 进行订单管理。我想提取每个 [SKU] 的最后一个订单以及为此支付的 [Price]。到目前为止,我认为我的方法是不正确的,因为每次支付的价格都会出现不同的行。

这是 LinnWorks 表格布局;

这是我尝试过的,在添加价格之前效果很好;

SELECT
    si.ItemNumber AS [SKU],
    DATEDIFF("d",MAX(o.dReceievedDate), GETDATE()) AS [Last Ordered],
    oi.fpricePerUnit AS [Price],
    si.RetailPrice AS [MSRP]
FROM [Order] o
INNER JOIN OrderItem oi 
    on o.pkOrderID = oi.fkOrderID
LEFT OUTER JOIN StockItem si 
    on si.pkstockItemId = oi.fkStockItemID_processed
WHERE o.Source = 'EBAY'
GROUP BY si.ItemNumber, oi.fpricePerUnit, si.RetailPrice

我明白它为什么这样做(分组),但我不知道解决问题的方法。

【问题讨论】:

  • 我已经理解你的问题了。我想你需要添加 max([Last Ordered])

标签: sql sql-server select subquery


【解决方案1】:
;WITH CTE AS
(
SELECT
    si.ItemNumber AS [SKU],
    DATEDIFF("d",o.dReceievedDate, GETDATE()) AS [Last Ordered],
    row_number() over (PARTITION BY si.ItemNumber, oi.fpricePerUnit, si.RetailPrice 
       ORDER BY o.dReceievedDate DESC) rn,
    oi.fpricePerUnit AS [Price],
    si.RetailPrice AS [MSRP]
FROM [Order] o
INNER JOIN OrderItem oi 
    on o.pkOrderID = oi.fkOrderID
LEFT OUTER JOIN StockItem si 
    on si.pkstockItemId = oi.fkStockItemID_processed
WHERE o.Source = 'EBAY'
)
SELECT * FROM CTE WHERE rn = 1

【讨论】:

  • 它仍在生成重复的订单项。唯一不同的列是价格和最后订购。还有其他想法吗?那里的阅读很有趣,我要学习一些新东西。
  • 我从“PARTITION BY”部分中删除了“oi.fpricePerUnit”(疯狂猜测),“看起来”是对的!哇谢谢..
  • 在上面的查询中使用sql server 2012,我们可以避免第二次选择(SELECT * FROM CTE WHERE rn = 1)。就像使用任何窗口函数一样。有什么办法吗?
  • @KumarHarsh 不,目前无法避免此类问题的子集解决方案
猜你喜欢
  • 2017-04-04
  • 2018-10-14
  • 1970-01-01
  • 2016-04-25
  • 2015-11-05
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多