Sql-Server

盤點新項目的訂單

  • June 20, 2017

場景:找出每個工廠中的任何客戶,他們有三個或更多訂單,其中包含他們以前從未購買過的新商品。例如,約翰有:

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中測試**

引用自:https://dba.stackexchange.com/questions/176653