按日期使用平均订单查询

时间:2014-11-10 21:46:45

标签: sql group-by

我正在查询包含日期和数字的表格。我需要在desc顺序中排名前10位的日期和平均列的值。

SELECT TOP (10) columnName1, AVG(columnNumber1) AS AvgNumber
WHERE ....
AND ...

GROUP BY columnName1
**Order by date desc**

获取我需要按日期排序的最高重新发送日期

RGS

我需要对日期列进行排序,然后对前十名进行平均。使用group by i必须在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 NULL

2003-09-30 2

2004-10-04 2

1989-04-01 1

1995-05-26 4

从员工中选择top(5)avg(locationid) 由HireDate desc命令

Msg 8127,Level 16,State 1,Line 2 专栏" Employee.HireDate"在ORDER BY子句中无效,因为它不包含在聚合函数或GROUP BY子句中。

需要的结果

HireDate LocationID 2007-05-17 1

2004-10-04 2

2003-09-30 2

2002-08-12 1

2001-11-15 4

平均= 2

2 个答案:

答案 0 :(得分:2)

要强制执行所需的逻辑操作顺序,请使用派生表:根据日期列的降序选择前10行,然后将结果用作数据集以从中获取平均值:

SELECT AVG(Value)
FROM
(
  SELECT TOP (10) Value
  FROM YourTable
  WHERE ...
  ORDER BY DateColumn DESC
) AS s
;

答案 1 :(得分:0)

实现此目的的最简单方法是将日期添加到组中。如果您不想返回日期,那么您可以将结果包装在另一个选择中以将其删除,如下所示:

SELECT AVGLocation 
FROM (SELECT TOP (5) avg(locationid) as AVGLocation, HireDate
    FROM Employee 
    GROUP BY HireDate
    ORDER BY HireDate desc) TableAliasName