【问题标题】:I am trying to get latest month salary from salary table, where multiple entry of employeeID in salary table for each month我正在尝试从薪水表中获取最新月份的薪水,其中每个月在薪水表中输入多个employeeID
【发布时间】:2018-02-13 04:37:08
【问题描述】:

员工表" empno, 姓名, sal_id, emp_id, 薪水, 月份

工资表:

sal_id, emp_id, 薪水, 月份

我正在尝试查询从员工表中获取所有员工 + 在salary表中,emp_id有多个条目(可能没有)。

我想要最新工资(或上个月工资)的员工名单

我目前的查询是:

SELECT * FROM emp LEFT JOIN salary ON emp.empno = salary.emp_id GROUP BY empno ORDER BY salary.sal_id DESC

但是我得到的是第一份薪水的员工名单,我想要最新的薪水。

帮帮我:( Emploee table Salary table

【问题讨论】:

  • 请勿将屏幕截图作为附件发布。不要懒得在问题中添加相关代码。
  • 您的订单错误,请尝试使用日期或其他内容

标签: mysql


【解决方案1】:

您是按sal_id 订购的,而不是您可能希望按salary 中代表其月份的字段订购。

【讨论】:

  • @SRDepp 这可能是因为您似乎将月份存储为字符串。这样,您将只有字母顺序。你应该在你的数据库中使用日期类型。
【解决方案2】:
SELECT emp.empno, emp.name, (
        SELECT sal
        FROM salary
        WHERE salary.empno = emp.empno
        ORDER BY salary.sal_id DESC LIMIT 1
        )
FROM emp

【讨论】:

  • 谢谢,但我希望在单个查询中没有嵌套查询
  • 感谢您抽出宝贵时间提供答案。正是因为像您这样乐于助人的同龄人,我们才能作为一个社区一起学习。以下是一些关于如何使您的答案出色的提示:How do I write a good answer
【解决方案3】:

经过大量的研发和谷歌搜索,我找到了解决方案。 单个查询是不可能的,我们必须应用2个查询

SELECT * FROM emp LEFT JOIN salary ON salary.emp_id=emp.empno WHERE salary.sal_id IN ( SELECT MAX(salary.sal_id) FROM salary GROUP BY salary.emp_id ) GROUP BY salary.sal_id ORDER BY salary.sal_id DESC

【讨论】:

    猜你喜欢
    • 2015-07-27
    • 2016-07-24
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2020-06-04
    相关资源
    最近更新 更多