【发布时间】:2018-10-04 21:37:21
【问题描述】:
对于一个学校项目,我试图用 SQL 编写一个查询来检查订单表,如果有任何买家在 72 小时的时间跨度内花费超过 15.000 美元。
所以我的数据库包含一个订单表,每个订单包含一个唯一的买家名称、订单日期(OrderCreatedOn)和订单价格(金额)。通过我的 SQL 查询,我试图在 72 小时内单个客户的订单总和超过 15.000 美元时触发警报。
我想出了以下查询:
SELECT Orders.BuyerName, SUM(Amount) AS Total_Amount, Orders.OrderCreatedOn
FROM Orders
WHERE OrderCreatedOn BETWEEN OrderCreatedOn AND DateADD(Hour, - 72 ,
GETDATE())
GROUP BY Orders.BuyerName, Orders.amount , Orders.OrderCreatedOn
HAVING SUM(Orders.Amount) > 15000
ORDER BY BuyerName DESC
但WHERE 子句似乎无法正常工作,它只是返回 SUM 超过 15.000 的所有订单,我不知道如何解决。
任何帮助将不胜感激:),在此先感谢!
【问题讨论】:
-
WHERE OrderCreatedOn BETWEEN GETDATE() AND DateADD(Hour, - 72 , GETDATE()) -
在预期的输出中为什么有
OrderCreatedOn?这是第一顺序吗?最后一个?如果买家出现 2 次怎么办(想想 6 天内每天下订单,其中任何连续 3 天的总和超过过滤后的金额)。 -
你快到了。使用@PM77-1 建议的内容,但不要忘记交换
getdate和dateadd位置)实际上>= dateadd(-72)就足够了 - 不需要上限。Orders.amount , Orders.OrderCreatedOn在GROUP BY列表中不是必需的 - 它们阻止按BuyerName分组。
标签: sql sql-server sql-server-2017