首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按名称和每天平均值在SQL中进行聚合

按名称和每天平均值在SQL中进行聚合
EN

Stack Overflow用户
提问于 2014-12-02 17:34:50
回答 1查看 525关注 0票数 0

我在一个表格中有以下格式的数据(我只显示了两个小时的值,但实际上我有所有24小时的值):

代码语言:javascript
复制
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

我想从视图中获得一整天的平均可用性,格式如下:

代码语言:javascript
复制
Name    Availability       Date     ItemID
--------------------------------------------------------
S1         77.5         2014-11-11  1124023
S2          55          2014-11-11  1124010

如果输出中的日期显示为2014-11-11 :00:00:00.000也是可以的。

我试过以下几种方法,但不起作用。任何帮助都将不胜感激。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-02 17:46:06

您当前的查询非常接近,您在GROUP BY子句中缺少了一些列。我也会建议一个更短的方式来获得日期没有时间。

代码语言:javascript
复制
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子句中,因此需要包含NameItemID

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27255528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档