Диапазон дат подсчета SQL - PullRequest
1 голос
/ 28 ноября 2011

Я пытаюсь выполнить запрос к своей базе данных SQL, чтобы получить количество заказов, сделанных каждым клиентом в пределах определенного диапазона дат.

У меня есть список заказов следующим образом

CustomerName       ClientID        DateOrdered
Customer No.2         10            2011-11-25
Customer No.3         11            2011-10-15
Customer No.3         11            2011-11-25

и я хочу узнать, сколько заказов было сделано конкретным клиентом, например, между 2011-11-1 и 2011-11-30, это должно привести к:

CustomerName       ClientID        Number
Customer No.3         11             1
Customer No.2         10             1

Пока мне удалось получить это

SELECT CustomerName, ClientID, COUNT(*) AS Number      
FROM Orders t     
GROUP BY CustomerName, ClientID      
HAVING COUNT(*) =      
(SELECT MAX(Number)         
FROM          
(SELECT CustomerName, ClientID, COUNT(*) AS Number             
FROM Orders            
GROUP BY CustomerName, ClientID ) x       
WHERE CustomerName = t.CustomerName )

Что дает мне каждый заказ, который когда-либо делал клиент

CustomerName       ClientID        Number
Customer No.3         11             2
Customer No.2         10             1

Я собираюсь найти правильный путь, чтобы решить эту проблему, или есть более простой способ, который я полностью упустил из виду!

Ответы [ 4 ]

6 голосов
/ 28 ноября 2011
select CustomerName, ClientID, count(*)
from
(
    select CustomerName, ClientID
    from Orders
    where datediff(mm, DateOrdered, getdate()) <= 1
 )a
group by CustomerName, ClientID

Для этого используется подзапрос, который фильтрует строки по датам в данном месяце (кажется, это то, что вы ищете).Затем он группируется по CustomerName и ClientID и получает сумму своих заказов.

5 голосов
/ 28 ноября 2011

Должно работать нормально:

select CustomerName, ClientID, count(*) as Number
from Orders
where DateOrdered between '20111101' and '20111130'
group by CustomerName, ClientID
1 голос
/ 28 ноября 2011
select ClientID, max(CustomerName), count(*) 
from Orders 
where DateOrdered between '2011-11-01' and '2011-11-30'
group by ClientID

В зависимости от базы данных может потребоваться изменить синтаксис выбора DateOrdered.

0 голосов
/ 28 ноября 2011
SELECT
  c.CustomerName,
  count(o.OrderID) as Orders
FROM
  orders o
JOIN clients c ON o.ClientID = c.ClientID
WHERE
  o.DateOrdered BETWEEN '2011-11-01' AND '2011-11-20'
GROUP BY c.ClientID ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...