我正在尝试查询我的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
Run Code Online (Sandbox Code Playgroud)
我希望能够找出特定客户在2011-11-1和2011-11-30之间订了多少订单,这应该会导致:
CustomerName ClientID Number
Customer No.3 11 1
Customer No.2 10 1
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经设法得到了这个
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 )
Run Code Online (Sandbox Code Playgroud)
这给了我客户所做的每一笔订单
CustomerName ClientID Number
Customer No.3 11 2
Customer No.2 10 1
Run Code Online (Sandbox Code Playgroud)
我是否正确地解决这个问题,或者是否有一种我完全忽略的简单方法!
小智 6
select CustomerName, ClientID, count(*)
from
(
select CustomerName, ClientID
from Orders
where datediff(mm, DateOrdered, getdate()) <= 1
)a
group by CustomerName, ClientID
Run Code Online (Sandbox Code Playgroud)
这样做的目的是利用一个子查询来按行给定月份的日期过滤行(这似乎是你要找的东西).然后它按CustomerName和分组ClientID并得到他们的订单总和.
应该工作正常:
select CustomerName, ClientID, count(*) as Number
from Orders
where DateOrdered between '20111101' and '20111130'
group by CustomerName, ClientID
Run Code Online (Sandbox Code Playgroud)