使用SQL查找每个员工的最新工资(注意-一个员工在不同日期有许多工资记录)



在我的工资表中,每个员工在不同的持续时间内都有多个工资(一对多关系(。这些不同的持续时间被记录在工资表中;从_日期"以及";to_date";。以下是工资表的片段:

Select * FROM salaries

薪资表的代码段

如何获得一个输出,显示一个包含员工编号、from_date(基于最新工资日期(和最新工资的表。所以基本上我想回答-每个员工的最新工资是多少

我尝试过,但我只能获得每个员工的员工编号和from_date的最大值,但我无法提取最新工资,我没有在SELECT语句中输入工资,因为这将显示员工的所有工资,而不是最新工资。这是我得到的代码和输出:

SELECT emp_no, Max(from_date) as "Most Current Salary Date"
from salaries
group by emp_no

上述代码的输出

我追求的最终结果是:在我的输出中,我希望第三列作为每个员工的工资列,以他们最新的工资Max(from_date(为基础。不需要考虑我在工资栏的输出汇总中所追求的内容。

您在查询中没有选择薪资。

请尝试:

SELECT emp_no, salary, Max(from_date) as "Most Current Salary Date"
from salaries
group by emp_no

如果你想根据emp_no计算总工资,请尝试:

SELECT emp_no, SUM(salary) as total_salary, Max(from_date) as "Most Current Salary Date"
from salaries
group by emp_no

以下是给出答案的两种方法:

第一种方法-通过创建工资表的两个实例(t1和t2(来运行子查询:

WITH temp as
(
SELECT emp_no as `Employee ID`, max(from_date) as `Most Recent Salary Date`
FROM salaries
group by emp_no
)
SELECT t1.`Employee ID`, t1.`Most Recent Salary Date`, t2.salary as `Most Current Salary`
FROM temp t1 LEFT JOIN salaries t2 ON (t1.`Employee ID` = t2.emp_no)
WHERE t1.`Most Recent Salary Date` = t2.from_date

通过第一进近输出

第二种方法-使用窗口函数方法,如Row Number((、Partition By((:

WITH temp as
(SELECT emp_no as `Employee ID`, from_date as `Most Recent Salary Date`, salary as `Most Current Salary`, row_number() OVER (partition by emp_no order by from_date desc) as 'Row Number'
FROM salaries
)
SELECT `Employee ID`, `Most Recent Salary Date`, `Most Current Salary` 
FROM temp
WHERE `Row Number` = 1

通过第二进近输出

最新更新