Employee表保存一年中的薪水信息。
编写一个SQL以获得3个月内雇员工资的累积总和,但不包括最近一个月。
结果应以“ Id”升序显示,然后以“月”降序显示。
示例 输入
| Id | Month | Salary |
|----|-------|--------|
| 1 | 1 | 20 |
| 2 | 1 | 20 |
| 1 | 2 | 30 |
| 2 | 2 | 30 |
| 3 | 2 | 40 |
| 1 | 3 | 40 |
| 3 | 3 | 60 |
| 1 | 4 | 60 |
| 3 | 4 | 70 |
输出
| Id | Month | Salary |
|----|-------|--------|
| 1 | 3 | 90 |
| 1 | 2 | 50 |
| 1 | 1 | 20 |
| 2 | 1 | 20 |
| 3 | 3 | 100 |
| 3 | 2 | 40 |
说明 员工“ 1”在接下来的3个月中有3份薪水记录,最近的月份“ 4”除外:“ 3”月的薪水40,“ 2”月的薪水30和“ 1”月的薪水20 因此,该雇员在3个月内的累计工资总额分别为90(40 + 30 + 20),50(30 + 20)和20。
| Id | Month | Salary |
|----|-------|--------|
| 1 | 3 | 90 |
| 1 | 2 | 50 |
| 1 | 1 | 20 |
除了最近的一个月“ 2”,雇员“ 2”只有一个薪水记录(“ 1”月)。
| Id | Month | Salary |
|----|-------|--------|
| 2 | 1 | 20 |
除最近的工资月“ 4”外,“ 3”号有两条工资记录:“ 3”月为60,“ 2”月为40。因此,累积工资如下。
| Id | Month | Salary |
|----|-------|--------|
| 3 | 3 | 100 |
| 3 | 2 | 40 |
我的查询是
SELECT e.id, e.month,
RunningTotal = sum(e.salary ) OVER (ORDER BY e.Id ,e.month )
FROM employee e inner join
employee e2
on e.id=e2.id and e.month=e2.month and
e.month <> (select max(month) from employee group by id having id=e.id )
order by e.id asc, e.month desc
我遇到的错误是
第3行:SyntaxError:靠近'(ORDER BY e.Id,e.month)来自雇员e 内部员工e2上的e2id = e2.i'
答案 0 :(得分:0)
尝试以下简单查询:
select id, month, salary,
(select sum(salary) from tbl where id = t.id and month <= t.month) cumulative
from tbl t
where month <> (select max(month) from tbl where id = t.id)
order by id, month desc