Генерация номеров строк и присвоение одинаковых номеров строк одинаковым значениям. - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть требование показывать повторяющийся номер строки для повторяющихся значений для каждого нового вхождения.

Пример таблицы 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

Но мне нужен был номер строкидолжен быть напечатан в последовательности для каждого нового вхождения, как показано в ожидаемом выводе.

1 Ответ

0 голосов
/ 30 ноября 2018

Вы хотите что-то похожее на 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.

...