Sql 在单个查询中合并不同时间段的每日平均值

Sql 在单个查询中合并不同时间段的每日平均值,sql,sql-server,Sql,Sql Server,我有一个表,其中有多个产品的每小时条目,可以追溯到2年前。我正在尝试编写一个如下所示的查询: PRODUCT, TODAY'S AVERAGE, LAST MONTHS DAILY AVERAGE, YEAR TO DATE DAILY AVERAGE 我可以通过为每个平均值编写单独的查询,然后在产品名称上加入它们来实现这一点。但是,我希望通过编写一个查询也能做到这一点 它们是我可以应用的标准算法/方法吗?这是一个聚合查询。但是,它会为您想要的每个时间段获取变量,并按天求和以进行最终计算 se

我有一个表,其中有多个产品的每小时条目,可以追溯到2年前。我正在尝试编写一个如下所示的查询:

PRODUCT, TODAY'S AVERAGE, LAST MONTHS DAILY AVERAGE, YEAR TO DATE DAILY AVERAGE
我可以通过为每个平均值编写单独的查询,然后在产品名称上加入它们来实现这一点。但是,我希望通过编写一个查询也能做到这一点


它们是我可以应用的标准算法/方法吗?

这是一个聚合查询。但是,它会为您想要的每个时间段获取变量,并按天求和以进行最终计算

select product,
       sum(DailySum*IsToday) as Today,
       sum(1.0*DailySum*IslastMonth) / sum(IslastMonth)
       sum(1.0*DailySum*IsYTD) / sum(IsYTD)
from (select product, cast(dt as date) as thedate, sum(val) as DailySum
             (case when cast(dt as date) = cast(getdate() as date) then 1 else 0 end) as IsToday,
             (case when year(dt) = year(dateadd(month, -1, getdate()) and month(dt) = month(dateadd(month, -1, getdate())
                   then 1 else 0
              end) as IslastMonth,
             (case when year(dt) = year(getdate()) tehn 1 else 0
              end) as IsYTD
       from t
       group by product, cast(dt as date)
     ) t
     ) t

你能给我们你的查询吗?你能给你的表定义吗?如果你已经有了一些有效的东西,那么你为什么要寻找替代品?您当前的解决方案有哪些问题需要解决?您使用的是什么版本的SQL Server?我使用的是SQL 2005,我寻找替代方案的原因是减少联接。表定义为:TIMESTAMP、PRODUCTNAME、VALUE1、VALUE2时间戳存储格式为:1/1/1900 1:00 AM PRODUCTNAME是varchar16值。Value1和Value2四舍五入为2个小数点。I当前do:从TIMESTAMP={fn NOW}的表中选择ProductName,VALUE1内部连接从上个月开始和结束时间戳之间的时间戳的表中选择ProductName,AVGVALUE1