计算SQL Server中每行的平均值

时间:2016-10-03 13:57:50

标签: sql-server tsql

我需要计算每行第1年记录的每日平均值。 我可以通过迭代while循环来做到这一点,但我确信我可以实现这个更简单。我可能需要一个查询来计算Amount字段附近的avgAmount。

平均值的计算方法是将金额相加并除以每行的最小和最大日期之差。

create table a
(
date  datetime,
dept varchar(50),
amount float
)

insert into a values ('2016-02-07', 'abc', 25)
insert into a values ('2016-02-27', 'abc', 20)
insert into a values ('2016-03-09', 'abc', 30)
insert into a values ('2016-03-28', 'abc', 45)
insert into a values ('2016-04-07', 'abc', 40)
insert into a values ('2016-04-30', 'abc', 50)
insert into a values ('2016-05-07', 'abc', 60)
insert into a values ('2016-05-27', 'abc', 50)
insert into a values ('2016-06-30', 'abc', 38)
insert into a values ('2016-07-17', 'abc', 45)
insert into a values ('2016-07-30', 'abc', 55)
insert into a values ('2016-08-07', 'abc', 70)

SQLFIDDLE

请帮忙吗?

3 个答案:

答案 0 :(得分:2)

一种方法是:

dataLayer.push({
   'event': 'addToCart',
   'ecommerce': {
      'add': {
         'products': // dataLayerProducts, one object per product
      },
   }
});
dataLayer.push({
   'event': 'checkout',
   'ecommerce': {
      'checkout': {
         'actionField': {'step': 1},
         'products': // dataLayerProducts, one object per product
      }
   }
});

SQL Fiddle

答案 1 :(得分:1)

试试这个:

with FirstCalc as
(
select dept, min(date) as MinDate, max(date) as MaxDate, sum(amount) as TotalAmount
from a
group by dept
)
select dept, TotalAmount/datediff(dd, MinDate, MaxDate) as AvePerDay
from FirstCalc

答案 2 :(得分:1)

如果是SQL Server:

Select Sum(a.amount) / datediff(day, start.Date, end.Date)
From a 
  join a start 
    on start.Date = (Select Min(Date) from a
                     Where Year(date) = @Year
                        and dept = a.Dept)
  join a end 
    on end.Date =  (Select Max(Date) from a
                     Where Year(date) = @Year
                        and dept = a.Dept)
Where Year(a.Date) = @year