在“薪资”表中,每个员工在不同的期间内都有多个薪资(一对多的关系)。这些不同的持续时间被记录在"from_date“和"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的最终结果是:在我的输出中,我希望根据每个employee_no的最新薪资最大值(From_date),将第三列作为薪资列。考虑到我在输出中想要的是什么,在薪资列上聚合并不是必需的。
发布于 2022-02-23 04:17:18
以下是给出答案的两种方法:
第一种方法-通过创建工资表的两个实例(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第二种方法--使用窗口函数方法,如行号()、分区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发布于 2022-02-17 05:18:10
您不在查询中选择薪资。
请尝试:
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_nohttps://stackoverflow.com/questions/71152809
复制相似问题