2011-09-08 12 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 

を今数百万のレコードがあると想像。同じ銘柄で同じ月に2つ以上の商品を購入した人をどのように見つけることができますか?

+0

私たちは同じ年の同じ月を想定することはできますか? –

答えて

1

GROUP BYステートメントを使用してこれを行うことができます。 dateをグループ化するための使用可能な形式に変換するには、MONTHYEAR関数を使用する必要があります。

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 
関連する問題