使用 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

ORDER 查询 BY 两个变量:sum() 和 date

我如何使用django orm的SQL子查询

mysql:优化查询 w/混合升序 ORDER BY

聚合函数种类和功能有哪些和分组查询 group by 与 order by的区别?

聚合函数种类和功能有哪些和分组查询 group by 与 order by的区别?