使用 Avg order by date 查询
Posted
技术标签:
【中文标题】使用 Avg order by date 查询【英文标题】:Query using Avg order by date 【发布时间】:2015-01-07 08:01:01 【问题描述】:我正在查询包含日期和数字的表。我需要按 desc 顺序排列的前 10 个日期和平均列的值。
SELECT TOP (10) columnName1, AVG(columnNumber1) AS AvgNumber
WHERE ....
AND ...
GROUP BY columnName1
**Order by date desc**
要获得最重要的重新发送日期,我需要按日期顺序排序
rgs
我需要对日期列进行排序,然后平均前十名。使用 group by 我必须在 select 中放置日期并获得 10 个结果...我不想按日期分组。这可能不是这种方式
例如 HireDate LocationID
2001-01-01 1
2002-08-12 1
1999-09-01 2
1996-03-16 1
2007-05-17 1
2001-11-15 4
2000-01-01 1
2001-11-15 空
2003-09-30 2
2004-10-04 2
1989-04-01 1
1995-05-26 4
从 Employee 中选择前 (5) 个 avg(locationid) 按 HireDate 顺序排序
消息 8127,第 16 层,状态 1,第 2 行 ORDER BY 子句中的“Employee.HireDate”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
需要结果
雇用日期位置 ID 2007-05-17 1
2004-10-04 2
2003-09-30 2
2002-08-12 1
2001-11-15 4
平均 =2
【问题讨论】:
您的问题是什么?阅读您所缺少的内容并不清楚。您指出您需要前 10 个日期和平均值,您的查询似乎可以为您提供。你还想知道什么? 我需要对日期列进行排序,然后平均前十名。使用 group by 我必须在 select 中放置日期并获得 10 个结果...我不想按日期分组。这可能不是这种方式 如果您包含一些示例输入和预期输出,这将使您的问题更清楚。 【参考方案1】:要强制执行所需的逻辑操作顺序,请使用派生表:根据日期列的降序选择前 10 行,然后将结果用作数据集以从中获取平均值:
SELECT AVG(Value)
FROM
(
SELECT TOP (10) Value
FROM YourTable
WHERE ...
ORDER BY DateColumn DESC
) AS s
;
【讨论】:
【参考方案2】:实现这一点的最简单方法是将日期添加到分组依据。如果您不想返回日期,则可以将结果包装在另一个选择中以将其删除,如下所示:
SELECT AVGLocation
FROM (SELECT TOP (5) avg(locationid) as AVGLocation, HireDate
FROM Employee
GROUP BY HireDate
ORDER BY HireDate desc) TableAliasName
【讨论】:
您想要前 5 名的平均值,还是前 5 名的平均值?我的回答为您提供了前 5 名的平均值。 感谢 greg 我只需要一个结果,即前 5 名的 2 个平均值 这就是我的回答。第二个。 嗨@winchmore 如果这个或任何答案已经解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。以上是关于使用 Avg order by date 查询的主要内容,如果未能解决你的问题,请参考以下文章
MySQL进阶5--分组排序和分组查询 group by(having) /order by