Sql 寻找一个月内至少购买两次相同产品的人
例如,如果我有这些数据:Sql 寻找一个月内至少购买两次相同产品的人,sql,sql-server,tsql,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 St
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
现在想象一下有数百万条记录。我如何找到在同一个月内用同一库存ID购买了2种或更多产品的人 这可以使用
GROUP BY
语句来完成。
唯一的问题是您必须使用MONTH
和YEAR
函数将日期转换为可用格式以分组
SELECT Name
FROM Products
GROUP BY
MONTH(ServiceDate)
, YEAR(ServiceDate)
, StockID
, Name
HAVING COUNT(*) >= 2
此查询应提供姓名和股票id的列表,其中姓名在指定月份购买了2个或更多股票id
SELECT Name, StockId
FROM table
WHERE YEAR(ServiceDate) = 2011 AND MONTH(ServiceDate) = 2
GROUP BY Name, StockId
HAVING COUNT(Name)> 1
您可以使用下面的查询
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;
我们可以假设同一年的同一个月吗?嗨,谢谢你的回复。我猜你的查询会给我一个月的结果(如果我错了,请纠正我),但如果它有数百万条记录,那么我如何找出所有月份的结果?@jojo完全按照此答案中的查询进行操作,你就会得到你所要求的结果。也许你没有得到你想要的所有字段,但是你得到了你想要的所有字段。@jojo-你错了:)最简单的方法是尝试查询并验证结果。
select name from sales group by to_char(servicedate,'YYYYMM'),stockid,name having count(*) > 2;