查找一个月内至少购买2件相同产品的人

时间:2011-09-08 20:09:13

标签: sql sql-server tsql

如果我有这样的数据,例如:

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个或更多产品的人?

4 个答案:

答案 0 :(得分:2)

这可以使用GROUP BY语句完成。 唯一的问题是您必须使用MONTHYEAR函数将date转换为可用的格式才能分组。

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

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:0)

您可以使用以下查询。

create table sales 
(ProductName varchar(10),
ServiceDate date,
Name varchar(10),
StockId number(10)
);



insert into sales values('LG',to_date('10-01-2011','dd-mm-yyyy'),'John' ,1);
insert into sales values('Sony',to_date('20-02-2011','dd-mm-yyyy'),'Mike' ,2);
insert into sales values('LG',to_date('11-01-2011','dd-mm-yyyy'),'John' ,1);
insert into sales values('Samsung',to_date('21-02-2011','dd-mm-yyyy'),'Steve' ,3);
insert into sales values('Toshiba',to_date('02-03-2011','dd-mm-yyyy'),'Kelly' ,4);
insert into sales values('LG',to_date('06-05-2011','dd-mm-yyyy'),'Sean' ,1) ; 
insert into sales values('Sony',to_date('11-01-2011','dd-mm-yyyy'),'John' ,1);

查询:

 select name from sales group by to_char(servicedate,'YYYYMM'),stockid,name having count(*) > 2;