Sql-Server
盤點新項目的訂單
場景:找出每個工廠中的任何客戶,他們有三個或更多訂單,其中包含他們以前從未購買過的新商品。例如,約翰有:
Order A: Item 1, Item 2 Order B: Item 2, Item 3, Item 4 Order C: Item 3
訂單 B 有約翰以前從未購買過的物品,而訂單 C 沒有。
換句話說:從每個客戶的第二個訂單開始,我們想知道他們有多少訂單,其中至少有一件商品以前從未出現在他們的訂單上。
表架構:請參閱SQL Fiddle。RelatedRecordID 將多條記錄綁定到一個訂單中。
我的方法:另見上面的 SQL Fiddle。這種方法是有缺陷的,而且不夠穩健。在前面的 John 範例中,此方法將給出 2 個增量,但由於訂單 C 位於 B 之後,因此實際上只有一個增量。如果訂單 B 不包含第 3 項,則其優先級不會影響結果。
任何人都可以想到一個修復或新的方法來做到這一點?
CTE 首先找到第一個訂單,而不是購買每件商品(每個客戶和工廠),然後我們簡單地計算不同的訂單 ID(並減去 1,因為第一個訂單不計算在內):
with cta as ( select FactoryID, CustomerID, min(RelatedRecordID) as MinRelatedRecordID from Table1 group by FactoryID, CustomerID, ItemID ) select FactoryID, CustomerID, count(distinct MinRelatedRecordID)-1 as OrdersWithNewItems from cta group by FactoryID, CustomerID having count(distinct MinRelatedRecordID) > 3 ;
在**SQLfiddle.com中測試**