Как правильно работать с ROW_NUMBER()?
подскажите, пожалуйста, как реализовать независимую нумерацию.
У меня есть таблица task, допустим с 3 полями: id, name, task_id
Всего в таблице хранится 10 заданий, 3 из которых - мои.
На определённой странице вывожу только свои задания, но мне нужно узнать их номер в списке всех заданий.
Пример:
id, name, task_id
1 name1 8
2 name2 85
3 name3 6
4 name4 74
5 name5 15
6 name6 2
7 name7 1
Мои задания - 1, 4, 7.
Значит при правильном запросе у меня должно получиться что-то вроде:
num, id, name, task_id
4 1 name1 74
2 4 name4 85
7 7 name7 1
ORDER BY - task_id DESC
MySQL (ver. 8.0.20)
Ответы (2 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
До сих пор не ясно, как вы пришли к желаемому результату.
SQLfiddle
-- DDL and sample data population, start
CREATE TABLE tbl (id INT PRIMARY KEY, name NVARCHAR(30), task_id INT);
INSERT tbl (id, name, task_id)
VALUES
(1, 'name1' ,8 ),
(2, 'name2' ,85),
(3, 'name3' ,6 ),
(4, 'name4' ,74),
(5, 'name5' ,15),
(6, 'name6' ,2 ),
(7, 'name7' ,1 );
-- DDL and sample data population, end
SELECT *
, ROW_NUMBER() OVER (ORDER BY id) AS num
FROM tbl
WHERE id IN (1, 4, 7);
результат
+----+-------+---------+-----+
| id | name | task_id | num |
+----+-------+---------+-----+
| 1 | name1 | 8 | 1 |
| 4 | name4 | 74 | 2 |
| 7 | name7 | 1 | 3 |
+----+-------+---------+-----+
Автор решения: Герман Борисов
→ Ссылка
Сначала нумеруем все, затем выбираем нужные:
SELECT num, id, name, task_id
FROM(
SELECT id, name, task_id, ROW_NUMBER() OVER (ORDER BY task_id desc) AS num
FROM task
) T
WHERE id IN (1, 4, 7);