【问题标题】:SELECT where max date in subquery选择子查询中的最大日期
【发布时间】:2018-03-09 07:41:53
【问题描述】:

我已经从 MySQL(Test DB) 安装了 TestDB,我想做一些基本的查询。其中之一是:把每个员工的工资还给我。薪水表包含员工曾经拥有的每个薪水的列表,其中包含从开始到截止日期。我只想要新闻工资,所以“from_date”最高的那个。我已经设法将两张桌子一起Join,并且我已经设法将每个员工的最高薪水与他们的员工编号一起返还给我。但我不能让他们在一起。我在网上什么也没找到。可能我只是不知道要搜索什么。

不管怎样,这就是我想出的:

为每个emp_no选择最高薪水:

select emp_no, max(from_date) from salaries group by emp_no

为每个员工选择最高薪水并将其与其他数据结合起来(这个不起作用):

select * from employees e
LEFT JOIN salaries s
ON e.emp_no = s.emp_no
where s.from_date=(select max(from_date) from salaries group by emp_no);

这是 EER:

【问题讨论】:

  • 你想要什么,最高工资还是最近工资?
  • @TimBiegeleisen 我想要最近的薪水。 from_date最高的那个。

标签: mysql select subquery left-join


【解决方案1】:

如果您想要每个员工的最新工资,则将salaries 表加入子查询:

SELECT e.*, s1.*
FROM employees e
LEFT JOIN salaries s1
    ON e.emp_no = s1.emp_no
INNER JOIN
(
    SELECT emp_no, MAX(from_date) AS max_from_date
    FROM salaries
    GROUP BY emp_no
) s2
    ON s1.emp_no    = s2.emp_no AND
       s1.from_date = s2.max_from_date;

【讨论】:

  • 非常感谢。这正是我一直在寻找的。我不知道你可以在子查询上加入一些东西。
  • 员工没有薪水,但没有造成伤害,这很奇怪
  • @Strawberry 你看过电影办公空间吗?无论如何,对于 Stack Overflow 问题,我会一直覆盖我的基础 :-)
猜你喜欢
  • 2018-03-20
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多