Как найти последний класс сотрудника имеет тот же идентификатор. мой стол выглядит так:
+----+-------+-------+
| 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
попробуйте row_number
;with cte
as
(
SELECT
SeqNo = ROW_NUMBER() OVER(PARTITION BY ID ORDER BY
SUBSTRING(GRADE,1,1) desc,CAST(SUBSTRING(GRADE,2,LEN(GRADE)) AS INT) DESC),
*
FROM YourTable
)
SELECT
*
FROM CTE
WHERE SeqNo = 1
Если вы хотите вставить вышеуказанный результат в новую таблицу, просто напишите вставку перед выбором
;with cte
as
(
SELECT
SeqNo = ROW_NUMBER() OVER(PARTITION BY ID ORDER BY
SUBSTRING(GRADE,1,1) desc,CAST(SUBSTRING(GRADE,2,LEN(GRADE)) AS INT) DESC),
*
FROM YourTable
)
insert into MyNewTable
SELECT
*
FROM CTE
WHERE SeqNo = 1
Дайте группе номеров строк по идентификатору и порядку по убыванию порядку класса
Серверный запрос Sql
;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;
MySql Query
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;
A10
&A9
есть в качествеGrade
значений, ваш код будет выбратьA9
. Надеюсь, он должен выбратьA10
.