Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос выборки уникальных строк  [new]
Ejik43
Member

Откуда:
Сообщений: 14
Добрый день!
Мне необходимо отобрать уникальные записи из таблицы. Я использую Select distinct t1.a,t1.b,t1.c,t1.d,t1.e from t1. Запрос отбрасывает лишнее, но и берет часть ненужного.
Столбцы a,c,d однозначно определяют уникальность. Т.е. b и e для меня не так важны, но выводить их нужно.
Как выполнить запрос, при этом вывести только уникальные записи?
24 окт 16, 14:08    [19815727]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
asdor
Member

Откуда: Москва
Сообщений: 508
>>Столбцы a,c,d однозначно определяют уникальность.
Значит по ним группировка.
>>b и e для меня не так важны, но выводить их нужно
И какие выводить, если на 1 с будет 22 е?
24 окт 16, 14:12    [19815752]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
ДинВинчеста
Guest
with c as (
 Select a,b,c,d, row_number() over (partition by a,c,d order by a) as rwn from t1
)
select * from c where rwn = 1
24 окт 16, 14:13    [19815756]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
Ejik43
Member

Откуда:
Сообщений: 14
ДинВинчеста,
Благодарю!
24 окт 16, 14:45    [19815939]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
Ejik43
Добрый день!
Мне необходимо отобрать уникальные записи из таблицы. Я использую Select distinct t1.a,t1.b,t1.c,t1.d,t1.e from t1. Запрос отбрасывает лишнее, но и берет часть ненужного.
Столбцы a,c,d однозначно определяют уникальность. Т.е. b и e для меня не так важны, но выводить их нужно.
Как выполнить запрос, при этом вывести только уникальные записи?
А зачем тогда вообще distinct?
group by нужен..
26 окт 16, 01:41    [19822088]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
msLex
Member

Откуда:
Сообщений: 9070
Makar4ik
А зачем тогда вообще distinct?
group by нужен..


при group by вы можете вывести значения b и e от разных записей, что, имхо, не очень правильно.
26 окт 16, 13:09    [19823590]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
iljy
Member

Откуда:
Сообщений: 8711
msLex
Makar4ik
А зачем тогда вообще distinct?
group by нужен..


при group by вы можете вывести значения b и e от разных записей, что, имхо, не очень правильно.


ээээ... че??? не приведете для изумленной публики пример, когда поля, перечисленные в группировке, выводятся от разных записей??
ну и вообще, ничего, что distinct - это, по сути, просто сахарок поверх group by?
26 окт 16, 13:55    [19823781]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21194
iljy, лучше приведите свой якобы тривиальный запрос - так будет проще показать, что Вы пропустили в инит-посте.
26 окт 16, 14:00    [19823795]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21194
Пардон, это было адресовано Makar4ik-у.
26 окт 16, 14:01    [19823802]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
o-o
Guest
iljy
msLex
пропущено...


при group by вы можете вывести значения b и e от разных записей, что, имхо, не очень правильно.


ээээ... че??? не приведете для изумленной публики пример, когда поля, перечисленные в группировке, выводятся от разных записей??
ну и вообще, ничего, что distinct - это, по сути, просто сахарок поверх group by?

вы невнимательно читаете.
в группировке участвуют a,c,d
и если нужно еще вывести b, e
то разумеется можно их получить от разных записей,
ведь их вы получите через какой-то агрегат.
вот пример
declare @t table (a int, b int, c int, d int, e int);
insert into @t values (1, 1, 1, 1, 2), (1, 1, 1, 2, 1);

select a, b, c, min(d) as d, min(e) as e
from @t
group by a, b, c
----
a	b	c	d	e
1	1	1	1	1

мы получили в результате строку, которой НЕТ в исходной таблице.
msLex писал про это
26 окт 16, 15:30    [19824221]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
iljy
Member

Откуда:
Сообщений: 8711
o-o
msLex писал про это


msLex каким-то странным образом противопоставил group by и distinct. Но вообще вопрос, как обычно, сводится к выяснению, что же именно хотел ТС (какие именно значения b,e нужны в случае наличия нескольких возможных вариантов).
26 окт 16, 16:29    [19824675]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
o-o
Guest
iljy
msLex каким-то странным образом противопоставил group by и distinct

да нет же, он просто не вырезал лишний distinct из поста Makar4ik-а,
который прочел тему по диагонали и предложил решать через group by.
26 окт 16, 16:35    [19824719]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
iljy
Member

Откуда:
Сообщений: 8711
o-o,

ну вообще, учитывая

Ejik43
b и e для меня не так важны, но выводить их нужно.


решение с group by вполне имеет право на жизнь до последующего уточнения. Но если речь идет именно о выводе ЦЕЛОЙ ЗАПИСИ на группу, то ROW_NUMBER в помощь. Или FIRST-LAST.
26 окт 16, 16:42    [19824783]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
o-o
Guest
iljy
o-o,

ну вообще, учитывая

Ejik43
b и e для меня не так важны, но выводить их нужно.


решение с group by вполне имеет право на жизнь до последующего уточнения. Но если речь идет именно о выводе ЦЕЛОЙ ЗАПИСИ на группу, то ROW_NUMBER в помощь. Или FIRST-LAST.

топик зовется "Вопрос выборки уникальных строк"
что как бы подразумевает на выходе уникальное по a,c,d *подмножество исходных строк*.
когда пишут "b и e для меня не так важны, но выводить их нужно"
я это понимаю так, что из двух строк с одинаковыми a,c,d
можно выбрать любую (а не, например, с максимальным b),
а не то чтобы вместо этих b и e без разницы что вывести.
msLex понимает ровно так же
26 окт 16, 16:51    [19824843]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос выборки уникальных строк  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
o-o
iljy
o-o,

ну вообще, учитывая

пропущено...


решение с group by вполне имеет право на жизнь до последующего уточнения. Но если речь идет именно о выводе ЦЕЛОЙ ЗАПИСИ на группу, то ROW_NUMBER в помощь. Или FIRST-LAST.

топик зовется "Вопрос выборки уникальных строк"
что как бы подразумевает на выходе уникальное по a,c,d *подмножество исходных строк*.
когда пишут "b и e для меня не так важны, но выводить их нужно"
я это понимаю так, что из двух строк с одинаковыми a,c,d
можно выбрать любую (а не, например, с максимальным b),
а не то чтобы вместо этих b и e без разницы что вывести.
msLex понимает ровно так же
+1 min(), max(), sum(), avg()...
Как пел певец - "всё в наших руках". :)
26 окт 16, 23:22    [19826098]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить