如果我有这样的数据,例如:
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 :(得分:2)
这可以使用GROUP BY
语句完成。
唯一的问题是您必须使用MONTH
和YEAR
函数将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;