获得最近3个工资的平均工资

wal*_*ged -1 sql t-sql sql-server

+------------+--------+-----------+---------------+
|  paydate   | salary | ninumber  | payrollnumber |
+------------+--------+-----------+---------------+
| 2015-05-15 |   1000 | jh330954b |             6 |
| 2015-04-15 |   1250 | jh330954b |             5 |
| 2015-03-15 |    800 | jh330954b |             4 |
| 2015-02-15 |    894 | jh330954b |             3 |
| 2015-05-15 |    500 | ew56780e  |             6 |
| 2015-04-15 |   1500 | ew56780e  |             5 |
| 2015-03-15 |   2500 | ew56780e  |             4 |
| 2015-02-15 |   3000 | ew56780e  |             3 |
| 2015-05-15 |    400 | rt321298z |             6 |
| 2015-04-15 |    582 | rt321298z |             5 |
| 2015-03-15 |    123 | rt321298z |             4 |
| 2015-02-15 |    659 | rt321298z |             3 |
+------------+--------+-----------+---------------+
Run Code Online (Sandbox Code Playgroud)

以上列表是我数据库中的数据.我需要为每个人获得前3个工资的平均值并输出.

我不知道从哪里开始,所以到目前为止我无法提供任何工作.

Gor*_*off 5

在SQL Server中,您可以使用它row_number()来获取子查询中的最后三个工资.然后使用avg():

select ninumber, avg(salary)
from (select t.*,
             row_number() over (partition by ninumber order by payrollnumber desc) as seqnum
      from table t
     ) t
where seqnum <= 3
group by ninumber;
Run Code Online (Sandbox Code Playgroud)