mysql - SQL查询员工最新等级,每个员工有多条具有相同id的记录

标签 mysql sql-server

如何查找具有相同 id 的员工的最新等级。 我的 table 是这样的:

+----+-------+-------+
| ID |  NAME | GRADE | 
| 1  |  ANN  |  A0   | 
| 1  |  ANN  |  A3   |  
| 2  |  JOE  |  B1   | 
| 3  | KIM   |  B3   | 
| 2  | JOE   |  B2   | 
| 3  | KIM   |  C1   | 
| 3  | KIM   |  C3   | 
+----+-------+-------+

如何查找 Ann、Kim 和 Joe 的最新成绩

我的输出是这样的:

name latestgrade
ann  A3
joe  B2
kim  C3

最佳答案

按 ID 给出行号组并按年级降序排列

Sql Server 查询

;with cte as(
    select [rn] = row_number() over(
        partition by [ID]
        order by len([GRADE]) desc, [GRADE] desc
    ), *
    from [your_table_name]
)
select [ID], [NAME], [GRADE]
from cte
where [rn] = 1;

<强> demo

MySql 查询

select t1.`ID`, t1.`NAMME`, t1.`GRADE` from (
    select `ID`, `NAME`, `GRADE`, (
        case `ID` when @curA 
        then @curRow := @curRow + 1 
        else @curRow := 1 and @curA := `ID` end 
    ) as `rn` 
    from `your_table_name` t, 
    (select @curRow := 0, @curA := '') r 
    order by `ID`, length(`GRADE`) desc, `GRADE` desc
)t1 
where t1.`rn` = 1;

<强> demo

关于mysql - SQL查询员工最新等级,每个员工有多条具有相同id的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47747295/

相关文章:

mysql - 在 MySQL 上导入错误的 .sql 文件的最佳实践

mysql - 将查询更改为mysql?

sql-server - 使用sql server数据工具创建ssis包

java - 合并现有对象不会更新数据库中更改的@Embedded

sql - 删除 SQL Server 中的字母字符

mysql - 如何将架构加载到 Node-MySQL ClearDB Azure 中?

mysql查询优化10万条记录左外连接

mysql - 如何将一张表与一对多表合并为一条记录结果

sql-server - 在 Server 2008 R2 上禁用旧 SSL 时站点加载和 sql 连接出现问题

java - 在 Java 中遍历 SQL 结果