我有一个工资单系统表,有四个字段和一些示例数据:
pkref employee_id new_wage effective_date
===== =========== ======== ==============
23 06031-BOB 10 080101
37 06031-BOB 15 090501
90 06031-BOB 13 110228
当员工的工资发生变化时,主键引用会自动递增,并记录相应的信息(effective_date
是时间戳,yymmdd)。没问题。
现在,我正在尝试查询
effective_date
标记我已经制作了我的第一个子查询(!),它几乎是正确的,但它是错误的。有些大师可以看看并给我一个正确方向的碰撞吗?
SELECT MAX(effective_date),new_wage FROM (SELECT effective_date,new_wage FROM hr_wages WHERE employee_code='06031-BOB') AS t1
理想情况下,我希望返回110228
和13
。但是,正如前面提到的大师无疑会立即看到的那样,有些事情是错的。 new_wage
值并不总是与最大effective_date
匹配。
因此。增值税吗?
答案 0 :(得分:3)
坚持下去,是什么阻止你做以下事情?
select effective_date, new_wage from hr_wages
where employee_code = '06031-BOB'
order by effective_date desc
limit 1
答案 1 :(得分:1)
对于只有一名员工,您可以在子查询中使用IN
SELECT new_wage, other data...
FROM hr_wages
WHERE effective_date IN (SELECT max(effective_date) FROM hr_wages WHERE employee_code='06031-BOB')
AND employee_code='06031-BOB' -- Corrected: Credits to Stev
ë
对所有员工
SELECT new_wage, CO
FROM hr_wages w LEFT JOIN
(SELECT max(effective_date) effective_date, employee_code
FROM hr_wages
GROUP BY employee_code
)d ON w.employee_code = d.employee.code AND w.effective_date = d.effective_date
答案 2 :(得分:0)
来自@niktrs的帖子提供了正确的答案,但它已被删除!
所以,这是我正在寻找的查询,有@niktrs的帮助。如果他的帖子回来了,我会接受的。
SELECT new_wage FROM hr_wages WHERE effective_date IN
(SELECT effective_date,new_wage FROM hr_wages WHERE employee_code='06031-BOB')
AND employee_code='06031-BOB'
这种丑陋可以美化,我敢肯定。