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

时间:2015-05-15 18:17:04

标签: sql sql-server tsql

+------------+--------+-----------+---------------+
|  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 |
+------------+--------+-----------+---------------+

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

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

1 个答案:

答案 0 :(得分: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;