【发布时间】:2016-09-13 22:09:52
【问题描述】:
对于每个 OrderID,需要检查 PartID-A 的 DueDate 是否比 PartID-B 早。
行分组 看来OVER(PARTITION) 可用于比较所有具有相同OrderID 的行。不幸的是,到目前为止,甚至没有一点成功。
字段比较 不确定 self-join 是否用于根据另一个字段 (PartID) 比较一个字段 (DueDate)。语法似乎不允许这种用法。
使用 SQL 2012
此查询提取数据但不分组也不进行日期比较。
SELECT
SALES_DOC_NUM AS [OrderID]
--, MAX(SALES_DOC_NUM) OVER(PARTITION BY SALES_DOC_NUM)
, RTRIM(SHIP_TO_ADDRESS_CODE) AS [ShipToID]
, ITEM_NUMBER AS [PartID]
, CONVERT(VARCHAR(17), REQ_SHIP_DATE, 110) AS [DueDate]
FROM SPV3SALESLINEITEM
WHERE (ITEM_NUMBER = '1RC-AM'
OR ITEM_NUMBER = '1RC-DCR')
GROUP BY SALES_DOC_NUM, ITEM_NUMBER, SHIP_TO_ADDRESS_CODE, REQ_SHIP_DATE
ORDER BY SALES_DOC_NUM;
来自查询的表数据。
OrderID ShipToID PartID DueDate
SO003590 1614 DR 04-11-2016
SO003591 0532 AM 02-25-2016
SO003591 0532 DR 05-16-2016
SO003592 0812 AM 02-15-2016
SO003592 0812 DR 04-25-2016
SO003593 2216 AM 04-11-2016
SO003593 2216 AM 09-12-2016
SO003593 2216 DR 04-11-2016
SO003594 1411 AM 02-11-2016
SO003594 1411 DR 03-21-2016
SO003596 1065 AM 02-04-2016
SO003596 1065 DR 06-06-2016
SO003597 0504 AM 02-04-2016
SO003597 0504 DR 06-06-2016
【问题讨论】:
-
您的示例数据和问题不适合我。为什么
PartId列中没有名为“A”或“B”的值?你想要什么结果? -
嘿@GordonLinoff 为不匹配的混乱感到抱歉。 A 部分是“AM”,B 部分是“DR”。
标签: sql sql-server sql-server-2012