【发布时间】:2019-07-19 08:37:53
【问题描述】:
我正在尝试向名为 #opp_level 的现有临时表添加一个新列。此新列应按帐号反映当前关闭日期前 6 个月的平均支出。
我尝试了以下两种方法,但没有成功。
方法一:
SELECT [Close Date], [Prior 6 Mo Date], [Opportunity Id], [Account Name], [Account Number], [Total Opportunity Amount], AVG([Total Opportunity Amount]) OVER ( PARTITION BY [Account Number] ORDER BY [Close Date] RANGE BETWEEN [Prior 6 Mo Date] and [Close Date] --also tried BETWEEN unbounded preceding and current row ) FROM #opp_level ORDER BY [Close Date], [Prior 6 Mo Date], [Opportunity Id], [Account Name], [Account Number], [Total Opportunity Amount]方法二:
select a.[Close Date],a.[Total Opportunity Amount], avg(b.[Total Opportunity Amount]) AS [Prior 6 Mo Avg] from #opp_level a join #opp_level b on b.[Close Date] between dateadd(MONTH, -6, a.[Close Date]) and a.[Close Date] group by a.[Close Date], a.[Total Opportunity Amount] ORDER BY a.[Close Date]
我当前的数据集在没有“前 6 个月平均”列的情况下如下所示。这就是我要添加的列。
Close Date Prior 6 Mo Date Opportunity Id Account Name Account Number Total Opportunity Amount Prior 6 Month Avg Opp Spend
1/1/2018 7/1/2017 12345 A Team 8763496 50 50
6/1/2018 12/1/2017 12345 A Team 8763496 1000 525
11/1/2018 5/1/2018 12345 A Team 8763496 500 750
1/1/2018 7/1/2017 67890 B Team 9812081 300 300
6/1/2018 12/1/2017 67890 B Team 9812081 2000 1150
11/1/2018 5/1/2018 67890 B Team 9812081 80 1040
【问题讨论】:
-
你试过 AVG(CASE WHEN) 吗?
-
以表格格式展示您的样本和预期输出数据,以便更好地理解。
-
不幸的是,AVG(CASE WHEN) 不起作用@Jervs
-
我已经更新了表格视图,很抱歉@mkRabbani
-
什么是 Order 键以确保哪些行应该在哪一行之前或之后。您的日期列当前排序误导理解事物。
标签: sql sql-server