【发布时间】:2014-04-07 22:17:00
【问题描述】:
我使用的是 Microsoft SQL Server 2008
我正在尝试获取前 3 个月的平均利润,然后获取上个月的利润,然后我想进行计算以将上个月的利润与前 3 个月的平均值进行比较。
所以例子:
当月利润总和 -2 本月利润总和 -3 本月利润总和 -4
(本月利润总和 -2 + 本月利润总和 -3 + 本月利润总和 -4)的平均值 = 前 3 个月的平均值
前 3 个月的平均值 / 上个月的利润总和 = 差异
我目前的代码是:
select SUM(profit)as 'threemonthavg'
from invoices
where DATEPART(MM, SHIPPED_DATE) = DATEPART(MM, Dateadd(MM, -2, getdate()))
and DATEPART(YYYY, shipped_date) = DATEPART(YYYY, Dateadd(MM, -2, getdate()))
union
select SUM(profit)
from invoices
where DATEPART(MM, SHIPPED_DATE) = DATEPART(MM, Dateadd(MM, -3, getdate()))
and DATEPART(YYYY, shipped_date) = DATEPART(YYYY, Dateadd(MM, -3, getdate()))
union
select SUM(profit)
from invoices
where DATEPART(MM, SHIPPED_DATE) = DATEPART(MM, Dateadd(MM, -4, getdate()))
and DATEPART(YYYY, shipped_date) = DATEPART(YYYY, Dateadd(MM, -4, getdate()))
这给了我 3 个单元格中每个月利润的总和。完美的。现在我想平均这些数字,所以我把它放在一个子查询中:
select AVG([threemonthavg])
from
(
select SUM(profit) as 'threemonthavg'
from invoices
where DATEPART(MM, SHIPPED_DATE) = DATEPART(MM, Dateadd(MM, -2, getdate()))
and DATEPART(YYYY, shipped_date) = DATEPART(YYYY, Dateadd(MM, -2, getdate()))
union
select SUM(profit)
from invoices
where DATEPART(MM, SHIPPED_DATE) = DATEPART(MM, Dateadd(MM, -3, getdate()))
and DATEPART(YYYY, shipped_date) = DATEPART(YYYY, Dateadd(MM, -3, getdate()))
union
select SUM(profit)
from invoices
where DATEPART(MM, SHIPPED_DATE) = DATEPART(MM, Dateadd(MM, -4, getdate()))
and DATEPART(YYYY, shipped_date) = DATEPART(YYYY, Dateadd(MM, -4, getdate()))
)x
...所以现在我有我的平均水平了。现在我需要上个月的利润,这很容易获得,但是如何将上述查询与上个月的利润查询合并以执行除法计算?我已经尝试了很多连接,但我无法正确获取语法。有人能指出我正确的方向吗?
【问题讨论】:
标签: sql tsql subquery average divide