SQL - 根据另一列选择行之间的平均值获取列值

时间:2015-03-05 17:28:42

标签: sql sql-server

我有一张类似......的桌子。

[DateValueField][Hour][Value]
 2014-09-01      1     200
 ...
 2014-09-01      24    400
 2014-09-02      1     220
 ...
 2014-09-02      24    200
 ...

我需要为每个DateValueField提供相同的值,例如基于6-12之间的平均小时值,但是显示所有小时数,而不仅仅是6-12。例如......

[DateValueField][Hour][Value]
 2014-09-01      1     300
 ...
 2014-09-01      24    300
 2014-09-02      1     190
 ...
 2014-09-02      24    190
 ...

我正在尝试的查询是......

select DateValueField, Hour,
(select avg(Value) as Value from MyTable where Hour
between 6 and 12) as Value from MyTable
where DateValueField between '2014' and '2015'
group by DateValueField, Hour
order by DateValueField, Hour

但是它给了我作为所有值的平均值的价值,但是我需要在我指定的时间之间平均那个特定日期。

我很感激一些帮助/建议。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用派生表来获取按日期分组的小时6到12之间的平均值,然后将其连接到原始表

select t1.DateValueField, t1.Hour, t2.avg_value
from MyTable t1
join (
    select DateValueField, avg(Value) avg_value
    from MyTable
    where hour between 6 and 12
    group by DateValueField
) t2 on t2.DateValueField = t1.DateValueField
order by t1.DateValueField, t1.Hour

注意:如果您的某些日期在6到12小时之间没有值,但您仍想从MyTable中检索所有行,则可能需要使用左连接。