我在表格中有以下格式的数据(我只显示了两个小时的值,但实际上我有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 0: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)
答案 0 :(得分:3)
您当前的查询非常接近,您在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
见Demo。由于您使用的是SQL Server 2014,因此您可以将日期时间列转换为date
- 这会丢弃时间部分。我还建议您将Availability
列转换为int
以外的其他内容,以便获得小数。
由于您正在使用聚合函数,SELECT列表中未聚合的任何列都需要包含在GROUP BY
子句中,因此您需要包含Name
和{{1} }。