在其他条件下,如何选择最新薪资?MySQL

在其他条件下,如何选择最新薪资?MySQL,mysql,heidisql,Mysql,Heidisql,我只想选择高级女性员工的最新工资。我现在有以下疑问: SELECT e.emp_no, e.gender, tit.title, s.* FROM employees e INNER JOIN titles tit ON tit.emp_no = e.emp_no INNER JOIN salaries s ON e.emp_no = s.emp_no WHERE e.gender = "F" AND tit.title LIKE '%Senior%' 这

我只想选择高级女性员工的最新工资。我现在有以下疑问:

SELECT 
    e.emp_no,
    e.gender,
    tit.title,
    s.* 

FROM employees e
INNER JOIN titles tit ON tit.emp_no = e.emp_no
INNER JOIN salaries s ON e.emp_no = s.emp_no
WHERE e.gender = "F"
AND tit.title LIKE '%Senior%'

这将给出以下结果:

gender  title               emp_no  salary  from_date       to_date
"F"     "Senior Engineer"   "10006" "40000" "1990-08-05"    "1991-08-05"
"F"     "Senior Engineer"   "10006" "42085" "1991-08-05"    "1992-08-04"
"F"     "Senior Engineer"   "10006" "42629" "1992-08-04"    "1993-08-04"
"F"     "Senior Engineer"   "10006" "45844" "1993-08-04"    "1994-08-04"
"F"     "Senior Engineer"   "10006" "47518" "1994-08-04"    "1995-08-04"
"F"     "Senior Engineer"   "10006" "47917" "1995-08-04"    "1996-08-03"
"F"     "Senior Engineer"   "10006" "52255" "1996-08-03"    "1997-08-03"
"F"     "Senior Engineer"   "10006" "53747" "1997-08-03"    "1998-08-03"
"F"     "Senior Engineer"   "10006" "56032" "1998-08-03"    "1999-08-03"
"F"     "Senior Engineer"   "10006" "58299" "1999-08-03"    "2000-08-02"
"F"     "Senior Engineer"   "10006" "60098" "2000-08-02"    "2001-08-02"
"F"     "Senior Engineer"   "10006" "59755" "2001-08-02"    "9999-01-01"
"F"     "Senior Staff"      "10007" "56724" "1989-02-10"    "1990-02-10"
"F"     "Senior Staff"      "10007" "60740" "1990-02-10"    "1991-02-10"
"F"     "Senior Staff"      "10007" "62745" "1991-02-10"    "1992-02-10"


我在这里遗漏了什么?

如果您只想要最新的,您可以使用order by to date 和限制1

SELECT 
    e.emp_no,
    e.gender,
    tit.title,
    s.* 

FROM employees e
INNER JOIN titles tit ON tit.emp_no = e.emp_no
INNER JOIN salaries s ON e.emp_no = s.emp_no
WHERE e.gender = "F"
AND tit.title LIKE '%Senior%'
order by to_date 
limit 1 
对于每个emp,没有一个ypu可以使用subqiery formax连接(到目前为止)


您缺少只显示最后一份工资的条件。表达这一点的一种方式是要求员工不存在以后的工资:

SELECT 
  e.emp_no,
  e.gender,
  tit.title,
  s.* 
FROM employees e
INNER JOIN titles tit ON tit.emp_no = e.emp_no
INNER JOIN salaries s ON e.emp_no = s.emp_no
WHERE e.gender = 'F'
AND tit.title LIKE '%Senior%'
AND NOT EXISTS
(
  SELECT *
  FROM salaries s2
  WHERE s2.emp_no = s.emp_no
  AND s2.from_date > s.from_date
);
或选择所有最新日期并使用它们:

...
AND tit.title LIKE '%Senior%'
AND (emp_no, from_date) IN
(
  SELECT emp_no, MAX(from_date)
  FROM salaries
  GROUP BY emp_no
);

您缺少的是您的查询没有选择最新薪资的语句。显然,一名员工可以有多个职称,因此需要单独的表,对吗?难道没有更多关于头衔和薪水的东西吗?标题表中的日期范围可能是?如果不是,如果员工同时是“高级工程师”和“高级职员”,您会显示哪个头衔?您使用的是哪个MySQL版本?@ThorstenKettner头衔和工资之间的唯一关系是emp_no。我想我们可能根本不会打印标题。我的sql是3.6.3版。缺失:我是指最新版本,但对于每位高级女性员工:)我是说,对于emp_no=10006应该是59755,对于emp_no=10007-62745等等
...
AND tit.title LIKE '%Senior%'
AND (emp_no, from_date) IN
(
  SELECT emp_no, MAX(from_date)
  FROM salaries
  GROUP BY emp_no
);