【发布时间】:2021-04-04 07:36:46
【问题描述】:
我有一个包含货运数据的数据库。我正在尝试获取平均运费最高的三个船舶国家。我只想使用最近 12 个月的订单数据,使用 Orders 表中的最后一个订单日期作为结束日期。 Orders 表的前 10 个条目是:
我无法弄清楚如何为开始日期创建条件。我写的查询是:
SELECT ShipCountry, ROUND(AVG(Freight),2) AS AverageFreight
FROM [dbo].[Orders]
WHERE YEAR(OrderDate) < YEAR(MAX(OrderDate))
GROUP BY ShipCountry
ORDER BY AverageFreight DESC
我在这个查询中遇到的错误是:
聚合可能不会出现在 WHERE 子句中,除非它出现在 HAVING 子句或选择列表中包含的子查询中,并且被聚合的列是外部引用。
更新
我使用以下查询解决了这个问题:
SELECT TOP 3 ShipCountry, ROUND(AVG(Freight), 2) AS AverageFreight
FROM [dbo].[Orders]
WHERE OrderDate >= (SELECT DATEADD(mm,-12,(SELECT MAX(OrderDate) FROM [dbo].[Orders])))
GROUP BY ShipCountry
ORDER BY AverageFreight DESC
【问题讨论】:
-
您可以编辑您的问题并将您的查询作为您自己的答案。
-
我删除了不一致的数据库标签。请仅使用您真正使用的数据库进行标记。
-
请不要将您的解决方案放在您的问题中。添加答案并自我接受。
-
当然!我会解决的!
标签: sql sql-server datetime aggregate-functions date-arithmetic