我在一个表格中有以下格式的数据(我只显示了两个小时的值,但实际上我有所有24小时的值):
Name Availability Date ItemID
--------------------------------------------------------
S1 75 2014-11-11 19:00:00.000 1124023
S1 80 2014-11-11 20:00:00.000 1124023
S2 60 2014-11-11 19:00:00.000 1124010
S2 50 2014-11-11 20:00:00.000 1124010我想从视图中获得一整天的平均可用性,格式如下:
Name Availability Date ItemID
--------------------------------------------------------
S1 77.5 2014-11-11 1124023
S2 55 2014-11-11 1124010如果输出中的日期显示为2014-11-11 :00:00:00.000也是可以的。
我试过以下几种方法,但不起作用。任何帮助都将不胜感激。
SELECT Name, AVG(Availability), CAST(FLOOR(CAST(Date AS FLOAT)) AS DATETIME) AS Expr1, ItemID
FROM dbo.ServiceAvailability
GROUP BY CAST(FLOOR(CAST(Date AS FLOAT)) AS DATETIME)发布于 2014-12-02 17:46:06
您当前的查询非常接近,您在GROUP BY子句中缺少了一些列。我也会建议一个更短的方式来获得日期没有时间。
SELECT
Name,
AVG(cast(Availability as decimal(10, 2))),
CAST([Date] as date) AS Expr1,
ItemID
FROM dbo.ServiceAvailability
GROUP BY Name, CAST([Date] as date), ItemID见演示。由于您使用的是Server 2014,所以您只需将datetime列转换为一个date --这将删除时间部分。我还建议将Availability列转换为int以外的其他内容,这样就可以获得十进制数。
由于您使用的是聚合函数,所以选择列表中没有聚合的任何列都需要包含在GROUP BY子句中,因此需要包含Name和ItemID。
https://stackoverflow.com/questions/27255528
复制相似问题