DISTINCT одного поля для выборки всей таблицы
есть таблица:
id type script date name status priority
6 3 link Пт 10.04.20 16:38:48 name 1 1
7 2 link Пт 10.04.20 16:38:48 name 1 1,2
8 1 link Пт 10.04.20 16:38:48 name 1 1,2
9 2 link Пт 10.04.20 16:38:48 name 1 1,2
Если сделать так:
SELECT DISTINCT `type` FROM `api_script` WHERE `status` = 1
То всё получается правильно:
type
3
2
1
Но, если выбрать все поля, то не работает. Как я понял, DISTINCT работает сразу со всеми полями. Можно ли как-то сделать что бы он работал только с первым, а если нет, тогда какие варианты?
Желаемый результат:
id type script date name status priority
6 3 link Пт 10.04.20 16:38:48 name 1 1
7 2 link Пт 10.04.20 16:38:48 name 1 1,2
8 1 link Пт 10.04.20 16:38:48 name 1 1,2
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Из комментариев:
1) то, что вы написали - group by (type) 2) Спасибо, работает
Да, работает, но это только иллюзия. Сегодня выведет для type=2 - id=7, завтра - id=9.
Выберите критерий сортировки, например id. Если такого критерия нет, значит выводить все столбцы не надо, т.к. данные выбранные случайно - это мусор. Сделайте так (на fiddle):
with q (id, type, rest) as (
select 6, 3, 'link 10.04.20 16:38:48 name 1 1 ' union all
select 7, 2, 'link 10.04.20 16:38:48 name 1 1,2 ' union all
select 8, 1, 'link 10.04.20 16:38:48 name 1 1,2 ' union all
select 9, 2, 'link 10.04.20 16:38:48 name 1 1,2 ')
select id, type, rest from (
select q.*, row_number() over (partition by type order by id asc) rn
from q
) t
where rn=1
order by id;
id type rest
6 3 link 10.04.20 16:38:48 name 1 1
7 2 link 10.04.20 16:38:48 name 1 1,2
8 1 link 10.04.20 16:38:48 name 1 1,2