MySQL查询不太正确......可能很简单

时间:2011-06-25 08:31:50

标签: mysql sql subquery max

我有一个工资单系统表,有四个字段和一些示例数据:

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)。没问题。

现在,我正在尝试查询

  1. 与员工相关的所有条目,然后
  2. 这些子条目中的最大effective_date标记
  3. 与该最大值相对应的工资。
  4. 我已经制作了我的第一个子查询(!),它几乎是正确的,但它是错误的。有些大师可以看看并给我一个正确方向的碰撞吗?

    SELECT MAX(effective_date),new_wage FROM (SELECT effective_date,new_wage FROM hr_wages WHERE employee_code='06031-BOB') AS t1

    理想情况下,我希望返回11022813。但是,正如前面提到的大师无疑会立即看到的那样,有些事情是错的。 new_wage值并不总是与最大effective_date匹配。

    因此。增值税吗?

3 个答案:

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

这种丑陋可以美化,我敢肯定。