SQL查询以获取时间范围列表中的平均值

时间:2014-11-18 19:07:40

标签: sql sql-server

我想获得一些时间范围列表的某些列的平均值。时间范围不固定,因此不是每年或每月的平均值。

我不想针对每个范围对数据库进行查询,如果可能的话,我希望只进行一次此查询。

如果我们可以将2个时间范围的以下查询替换为仅一个查询,那将会很酷。

SELECT AVG(column1) FROM Table1 WHERE dateColumn > startRange1 && dateColumn < endRange1
SELECT AVG(column1) FROM Table1 WHERE dateColumn > startRange2 && dateColumn < endRange2

注意:时间范围列表可在1到12个指定范围之间变化。

1 个答案:

答案 0 :(得分:3)

case based aggregation是在单个查询中执行此操作的一种方法。

SELECT AVG(case when dateColumn > startRange1 && dateColumn < endRange1 then column1 end) as range1Avg,
       AVG(case when dateColumn > startRange2 && dateColumn < endRange2 then column1 end) as range2Avg
FROM Table1