Here's what I did using the following table definition and data, assuming you want the employee name and it's ok to list all employees who have the second highest salary:CREATE TABLE dept_salaries(dept_name VARCHAR(50), emp_name VARCHAR(50), salary INT);GOINSERT dept_salariesVALUES ('Sales', 'Smith', 100), ('IT', 'Jones', 500), ('IT', 'Green', 150), ('Sales', 'Olsen', 300), ('IT', 'Gates', 400), ('Sales', 'Fields', 200), ('IT', 'Lowe', 250), ('Sales', 'Mayes', 200);GO;WITH CTE AS( -- max salary by department SELECT dept_name, MAX(salary) max_salary FROM dept_salaries D1 WHERE salary < (SELECT MAX(salary) FROM dept_salaries WHERE dept_name = D1.dept_name) GROUP BY dept_name)-- list employees with the salary in CTESELECT D1.dept_name, D1.emp_name, D1.salary FROM dept_salaries D1 JOIN CTE D2 ON D1.dept_name = D2.dept_name AND D1.salary = D2.max_salaryORDER BY 1, 2;/* ResultsIT Gates 400Sales Fields 200Sales Mayes 200*/