【问题标题】:TSQL GROUP and average past 3 yearsTSQL GROUP 和过去 3 年的平均值
【发布时间】:2025-12-23 19:35:06
【问题描述】:

我想使用 tsql 查找按年份分组的结果及其过去 3 年的平均金额,精确到小数点后 2 位

    data

    Year amount
    2017 100
    2017 200
    2016 300
    2016 100
    2015 200
    2015 200
    2014 100
    2013 100

    expected result
    year amount
    2017 183.33
    2016 166.66
    2015 133.33
    2014 100 
    2013 100

【问题讨论】:

  • 你尝试了什么?
  • 奇怪的预期结果。您似乎错过了到目前为止所做的尝试。
  • 2015的值怎么是133.33?不应该是200吗?

标签: sql-server performance tsql


【解决方案1】:

使用 avg() over() 从子查询中获取过去三年的平均值,该子查询对当年的金额进行平均。

select 
    year
  , amount = avg(amount) over (order by year rows 2 preceding)
from (
  select year, amount = avg(convert(decimal(19,2),amount))
  from t
  group by year
  ) as s
order by year desc

rextester 演示:http://rextester.com/SUUP93797

返回:

+------+------------+
| year |   amount   |
+------+------------+
| 2017 | 183.333333 |
| 2016 | 166.666666 |
| 2015 | 133.333333 |
| 2014 | 100.000000 |
| 2013 | 100.000000 |
+------+------------+

【讨论】: