Найти людей, совершивших как минимум 2 покупки одного и того же продукта в месяц - PullRequest
0 голосов
/ 09 сентября 2011

Если у меня есть эти данные, например:

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 или более товаров в одном месяце с одинаковым запасом?

Ответы [ 4 ]

2 голосов
/ 09 сентября 2011

Это можно сделать с помощью оператора GROUP BY.Единственный недостаток - вы должны использовать функции MONTH и YEAR для преобразования вашего date в пригодный для использования формат для группировки.

SELECT  Name
FROM    Products
GROUP BY
        MONTH(ServiceDate)
        , YEAR(ServiceDate)
        , StockID
        , Name
HAVING  COUNT(*) >= 2        
0 голосов
/ 19 мая 2018

Вы можете использовать запрос ниже.

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;
0 голосов
/ 09 сентября 2011
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
0 голосов
/ 09 сентября 2011

Этот запрос должен дать вам список имен и идентификаторов акций, где имя приобрело 2 или более идентификаторов акций за указанный месяц.

SELECT Name, StockId
FROM table
WHERE YEAR(ServiceDate) = 2011 AND MONTH(ServiceDate) = 2
GROUP BY Name, StockId
HAVING COUNT(Name)> 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...