我正在查询包含日期和数字的表格。我需要在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
答案 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