在其他条件下,如何选择最新薪资?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
);