У меня есть требование показывать повторяющийся номер строки для повторяющихся значений при каждом новом появлении.
Пример таблицы orders со столбцом AGENT_CODE, и я хочу, чтобы ожидаемый результат был похож на
Sl agent_code
------------------
1 A001
2 A002
2 A002
2 A002
2 A002
2 A002
2 A002
2 A002
3 A003
3 A003
4 A004
4 A004
4 A004
4 A004
5 A007
5 A007
5 A007
6 A008
6 A008
Мне удалось получить номер строки с последовательностью типа 1,2,3,4 .... 19, написав запрос:
SET @row_number := 0;
SELECT @row_number := @row_number + 1 AS row_number, AGENT_CODE
FROM orders, (SELECT @row_number := 0) t
ORDER BY agent_code
Но я хотел, чтобы номер строки выводился последовательно для каждого нового вхождения, как показано в ожидаемых результатах.
5.2.37 Сервер MySQL
Сначала необходимо выполнить явное упорядочение в производной таблице. Прочтите этот ответ, чтобы понять, почему вы получаете неверные результаты: stackoverflow.com/a/53465139/2469308






Вам нужно что-то похожее на DENSE_RANK() OVER (ORDER BY AGENT_CODE), для которого требуется MySQL 8+. В более старых версиях вы могли просто сделать это:
SELECT AGENT_CODE, (
SELECT COUNT(DISTINCT AGENT_CODE) + 1
FROM orders AS x
WHERE x.AGENT_CODE < t.AGENT_CODE
) AS sn
FROM orders AS t
PS: если вы хотите использовать пользовательские переменные, вам понадобится еще одна переменная с именем @prevagent.
Разве WHERE x.AGENT_CODE < t.AGENT_CODE не должен быть WHERE x.AGENT_CODE <= t.AGENT_CODE
Нет, я забыл добавить 1 к COUNT(*).
Привет, @Salman A, похоже, это работает, но как мне начать с 1, потому что ваш результат дает мне от 0.
Какую версию MySQL вы используете?