Sql 获得最后3份工资的平均工资

Sql 获得最后3份工资的平均工资,sql,sql-server,tsql,Sql,Sql Server,Tsql,上面的列表是我数据库中的数据。我需要得到每个人前3个月工资的平均值,然后输出这个值 我不知道从哪里开始,所以到目前为止我无法提供我的任何工作 在SQL Server中,您可以使用row_number获取子查询中的最后三个工资。然后使用平均值: 欢迎来到stackoverflow。请阅读。使用适当的软件MySQL、Oracle、DB2等标记数据库问题很有帮助。。。和版本,例如sql-server-2014。语法和特性的差异通常会影响答案。这很好,因为每个实体只有4行数据。如果一个实体有6行数据会发

上面的列表是我数据库中的数据。我需要得到每个人前3个月工资的平均值,然后输出这个值


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

在SQL Server中,您可以使用row_number获取子查询中的最后三个工资。然后使用平均值:


欢迎来到stackoverflow。请阅读。使用适当的软件MySQL、Oracle、DB2等标记数据库问题很有帮助。。。和版本,例如sql-server-2014。语法和特性的差异通常会影响答案。这很好,因为每个实体只有4行数据。如果一个实体有6行数据会发生什么?@StarPilot无论每个实体有多少条记录,都会发生同样的事情。
+------------+--------+-----------+---------------+
|  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 |
+------------+--------+-----------+---------------+
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;