MySQL语法错误总计运行

时间:2018-07-26 16:48:58

标签: mysql sql

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'

1 个答案:

答案 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