各OrderIDについて、DueID for PartID-AにPartID-Bより前のDueDateがあるかどうかを確認する必要があります。各行グループ内で、別のフィールドに基づいて日付フィールドを比較します。
行のグループ化OVER(PARTITION)は、すべて同じOrderIDを持つ行を比較するために使用できます。残念なことに、これまでにない成功の渦巻きさえありません。
フィールド比較self-joinは、別のフィールド(PartID)に基づいて1つのフィールド(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」である。 –