对于每个OrderID,需要检查PartID-A的DueDate是否具有比PartID-B更早的DueDate。在每个行组内,根据另一个字段比较日期字段
行分组看起来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 sry的错配混乱。部分A是“AM”,部分B是“DR”。 –