我正在尝试从薪水表中获取最新月份的薪水,其中每个月在薪水表中输入多个employeeID

Posted

技术标签:

【中文标题】我正在尝试从薪水表中获取最新月份的薪水,其中每个月在薪水表中输入多个employeeID【英文标题】:I am trying to get latest month salary from salary table, where multiple entry of employeeID in salary table for each month 【发布时间】: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

【问题讨论】:

请勿将屏幕截图作为附件发布。不要懒得在问题中添加相关代码。 您的订单错误,请尝试使用日期或其他内容 【参考方案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

【讨论】:

以上是关于我正在尝试从薪水表中获取最新月份的薪水,其中每个月在薪水表中输入多个employeeID的主要内容,如果未能解决你的问题,请参考以下文章

从光标获取值

使用从同一个表中获取值的变量创建更新触发器的正确​​方法是啥?

从员工表中选择前 10 名薪水

为啥我的最高薪水查询有语法错误?

从表中找出第 n 高的薪水

LeetCode:Database 19.查询员工的累计薪水