【问题标题】:SQL- Avg value by date and IDSQL- 按日期和 ID 的平均值
【发布时间】:2014-10-13 21:10:25
【问题描述】:

我对 SQL 很陌生,无法弄清楚如何找到一些平均值。基本上我有 3 列的表,日期、ID 和值。我试图每天找到每个 ID 的平均值。实际的表有数千个条目,每天为每个 ID 记录的值数量不一。下面的示例表 -

SAMPLE TABLE
Date          ID     Value
1-1-14 12:45   1      5
1-1-14 13:45   1      6
1-1-14 08:45   2      8
1-1-14 10:45   2      8
1-2-14 01:45   1      2
1-2-14 04:45   1      4
1-2-14 01:45   2      20
1-2-14 04:45   2      24

SAMPLE RESULTS
Date       ID     AvgValue
1-1-14     1       5.5
1-1-14     2       8
1-2-14     1       3
1-2-14     2       22

我将不胜感激任何帮助!谢谢!

【问题讨论】:

  • 可能重复(我相信还有很多其他的)-stackoverflow.com/questions/3100921/…
  • 感谢您提供的额外资源!找了很久才决定发帖。如果不在搜索栏中使用正确的措辞,就很难找到问题的答案。我非常感谢这个链接,并将使用它来帮助我解决我的问题。

标签: sql average


【解决方案1】:

基本查询很简单:

select date, id, avg(value)
from your_table
group by date, id, avg

但是,由于您只需要 datetime 列的日期部分,您可以将其转换/转换为更窄的日期类型,而且,如果您平均的值是 int,您可能必须将其转换为首先是浮点类型。对于 SQL Server,查询可能如下所示:

select 
  cast(date as date) as date, 
  id,   
  avg(cast(value as decimal(10,5))) as avg
from table1
group by cast(date as date), id
order by 1

Sample SQL Fiddle

【讨论】:

  • 我相信我做错了,当我使用您提供的任一查询时,我会为每个 ID 上的每个日期返回多个值。我在日期和值字段上使用了 CAST,但它似乎不起作用。
  • @fondue222 你用的是什么数据库?如果每个日期获得多个值,那是因为分组发生在完整的日期时间级别,而不仅仅是日期。也许使用 cast(date as date) 不是您特定数据库的正确方法(对于 mysql 和 postgresql,它很可能是另一个需要的转换或转换。
猜你喜欢
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多