2011-09-08 63 views
0

如果我有這樣的數據,例如:找人至少有2次購買同一產品的在一個月內

ProductName  ServiceDate Name StockId Fee 

LG    1/10/2011 John 1   0 
Sony    2/20/2011 Mike 2   0 
LG    1/11/2011 John 1   0 
Samsung   2/21/2011 Steve 3   0 
Toshiba   3/2/2011  Kelly 4   0 
LG    5/6/2011  Sean 1   0 

現在想象一下,有幾百萬的記錄。我如何找到在同一個月內用同一個stockid購買2件或更多產品的人?

+0

我們可以假定同月同一年的? –

回答

1

這可以使用GROUP BY聲明來完成。 唯一的缺點是您必須使用MONTHYEAR函數將您的date轉換爲可用格式進行分組。

SELECT Name 
FROM Products 
GROUP BY 
     MONTH(ServiceDate) 
     , YEAR(ServiceDate) 
     , StockID 
     , Name 
HAVING COUNT(*) >= 2   
+0

嗨,感謝您的回覆。我想你的查詢會給我1個月的結果(糾正我,如果我錯了),但如果它的數百萬記錄如何找出所有月份? – jojo

+1

@jojo完全按照此答案中的查詢進行操作,並得到您要求的內容。也許你沒有得到你想要的所有領域,但是你得到了你要求的所有領域。 –

+0

@jojo - 你錯了:)找出最簡單的方法是嘗試查詢並驗證結果。 –

0

此查詢應爲您提供名稱和庫存ID的列表,其中名稱在指定月份中購買了2個或更多庫存ID。

SELECT Name, StockId 
FROM table 
WHERE YEAR(ServiceDate) = 2011 AND MONTH(ServiceDate) = 2 
GROUP BY Name, StockId 
HAVING COUNT(Name)> 1 
0
Select * 
FROM (
select StockID, ProductName, MONTH(serviceDate) as strMonth, year(serviceDate) as strYear COUNT(productName) as ProdCount 
FROM testTable 

Group By ProductName, StockID, MONTH(serviceDate), year(serviceDate) 
)a where ProdCount > 1 
相關問題