Из MySQL 8.0.0
и выше вы можете использовать оконные функции.
Функции окна ,
MySQL теперь поддерживает функции окна, которые для каждой строки из запроса выполняют вычисление с использованием строк, относящихся к этой строке. К ним относятся такие функции, как RANK (), LAG () и NTILE (). Кроме того, в качестве функций окна можно использовать несколько существующих совокупных функций; (g7) ROW_NUMBER () over_clause :
Возвращает номер текущего строка внутри своего раздела. Номера строк варьируются от 1 до количества строк раздела.
ORDER BY влияет на порядок, в котором строки нумеруются. Без ORDER BY нумерация строк является неопределенной.
blockquote>Демо:
CREATE TABLE Table1( id INT AUTO_INCREMENT PRIMARY KEY, col1 INT,col2 INT, col3 TEXT); INSERT INTO Table1(col1, col2, col3) VALUES (1,1,'a'),(1,1,'b'),(1,1,'c'), (2,1,'x'),(2,1,'y'),(2,2,'z'); SELECT col1, col2,col3, ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS intRow FROM Table1;