I have below SalaryTable.
----------------
EmpId Salary
----------------
1 100
2 200
3 300
1 400
2 500
3 600
1 700
2 800
3 900
1 1000
2 1100
3 1200
----------------
示例输出
-------------------
EmpId Salary
-------------------
1 700
2 800
3 900
-------------------
例如:
All the salary of Employee ID 1 [100,400,700,1000] and 700 is second largest salary of employee 1
像智慧一样展示所有员工。 我想在 SQL 和 LINQ 查询中显示每个员工第二高薪的员工。
在 Linq 中尝试此操作以了解详细信息
var results = Context.Employees
.GroupBy(b => b.Id)
.Select(e => new Table1
{
Id = e.Key,
Salary = e.OrderByDescending(f => f.Salary).Select(f => f.Salary).Distinct().Skip(1).First()
}).ToList();
如果它对 sql 不友好,则在 GroupBy 之后执行 ToList((
我在工资部分添加了不同的,以检查员工 ID = 1 是否有 450、450、450 和 300 作为薪水,那么 300 将是我心目中第二高的薪水
SQL 版本:
SELECT EmpId, MAX(Salary) AS Salary
FROM SalaryTable x
WHERE Salary < (SELECT MAX(Salary) FROM SalaryTable WHERE EmpId = x.EmpId)
GROUP BY EmpId
LINQ 版本:
list
.GroupBy(x => x.Id)
.Select(g =>
g.GroupBy(item => item.Salary)
.OrderByDescending(e => e.Key)
.Skip(1)
.First().First());