【发布时间】:2011-11-28 14:12:26
【问题描述】:
我正在尝试查询我的 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
我是在用正确的方法解决这个问题,还是有一种我完全忽略的更简单的方法!
【问题讨论】:
-
题外话:为什么订单表中有 CustomerID 和 CustomerName?要获得任何其他客户信息,您必须加入客户表。如果您输入错误的客户名称并进行了更正,您将需要修改订单表以进行更改。所以只有外键客户 ID 会更准确......
-
它实际上不应该在那里!谢谢你提醒我把它拿出来:)