![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DISTINCT?
Piter © (2004-05-10 00:22:00)Как можно извлечь все поля, но чтобы поле Some не повторялось?
Piter (2004-05-12 19:23:00) [1]sniknik © (10.05.04 17:13) [28]
Разобрался... немного не так себе представлял работу GROUP BY
А можно сделать нужный мне запрос без вложенных запросов?
Всем спасибо, извините, что отнял времени. Ну ламер, что поделать...
Erik (2004-05-10 17:50:00) [2]Я кажется телеатией овладел! Ну проверим, может тебе так подойдет: Select Some, count(Some) as MyCount name from myTable group by Some, name having MyCount > 1.
Не нихрена непонял, видать телепатию еще развивать надо :(
Vlad (2004-05-10 17:49:00) [3]
> Piter © (10.05.04 17:25) [29]
Так что, [26], [27] не подходит ?
Piter (2004-05-10 17:25:00) [4]Варианты:
1. Потерять Vitya и Vladimir.
2. Потерять Vitya и Mikle.
3. Потерять Sasha и Vladimir.
4. Потерять Sasha и Mikle
Блин, ну совсем за олуха меня не держите. Я понимаю, что можно потерять. Вот и прошу - приведите примеры запросов, когда теряются одни и примеры запросов, когда теряются другие.
Подходит? но одним Distinct-ом не обойдешься, надо использовать UNION
В принципе, интересно было бы посмотреть на реализацию запроса.
А так эти пустые поля необязательны, возвращать их не надо.
ты просто не понял (не захотел) см > Курдль © (10.05.04 13:18) [7]
а вот теперь видать дошло, вот и появились подробности структуры и уточнения вопроса
sniknik, а ты сегодня в плохом настроении, да?
А то бы ты увидел, что я задавал вопросы ДО поста №7, где Курдль объяснял. ПОСЛЕ этого поста у меня возникли уже другие вопросы, которые я задаю сейчас. Так что не надо наездов. И обсуждать эту тему не надо, дабы не плодить оффтоп.
sniknik (2004-05-10 17:13:00) [5]> И вообще:
> SELECT Min(ID) FROM Table1 GROUP BY Field1
> разве не вернет всего одну запись?
одну на каждую группу, т.е. по одной на каждое уникальное значение Field1.
sniknik (2004-05-10 16:54:00) [6]>> обьясняли уже, не понял других и неня не поймет
> что-то я не узрел, чтобы мне кто-то объяснил.
ты просто не понял (не захотел) см > Курдль © (10.05.04 13:18) [7]
а вот теперь видать дошло, вот и появились подробности структуры и уточнения вопроса.
Vlad © (10.05.04 16:31) [26]
> Как вариант:
+ min(name), потеряеш других.
Vlad (2004-05-10 16:31:00) [7]Как вариант:
select max(name), telephone from table group by telephone
Курдль (2004-05-10 16:15:00) [8]
> Встал вопрос - какие записи терять. В данном примере выбрать
> Vitya или Sasha
> и
> Vladimir или Mikle.
>
> Покажите плиз разные варианты...
Варианты:
1. Потерять Vitya и Vladimir.
2. Потерять Vitya и Mikle.
3. Потерять Sasha и Vladimir.
4. Потерять Sasha и Mikle.
А самому-то что надо? Если сам не знаешь, то как мы узнаем?
Есть еще вариант - лаконично, но более конкретно описать свою проблему.
Lola (2004-05-10 16:11:00) [9]Ты б почитал мой предыдущий пост...
Я тебе предлагаю вариант, в итоге которого получаешь:
Mikle 111111
Vladimir
Sasha 222222
Vitya
Alena 333333
Alexey 444444
Подходит? но одним Distinct-ом не обойдешься, надо использовать UNION.
Piter (2004-05-10 16:04:00) [10]Могу еще раз показать на примере. Допустим, есть база:
Name Telephone
-------------------
Mikle 111111
Sasha 222222
Alena 333333
Vitya 222222
Alexey 444444
Vladimir 111111
Теперь я хочу выбрать уникальные номера телефонов, но если напишу что-то типа:
SELECT DISTINCT Telephone
то получу:
Telephone
---------
111111
222222
333333
444444
То есть, поле Name не будет возвращено. А мне хочется его вернуть также.
Встал вопрос - какие записи терять. В данном примере выбрать Vitya или Sasha
и
Vladimir или Mikle.
Покажите плиз разные варианты...
Piter (2004-05-10 15:51:00) [11]
> Но ведь если у Вас 2 записи с одинаковым полем Field1, то
> какая-то из них будет утеряна
Ясно... Ну а как реализовать, чтобы была выбрана:
1) Первая
2) Последняя
3) та запись, у которой максимальные значения по другим полям (если поля числовые)?
> обьясняли уже, не понял других и неня не поймет
что-то я не узрел, чтобы мне кто-то объяснил.
select Some, avg(DigitField)
from MyTable
group by Some
А разве такой запрос не вернет одно поле Some у разных записей?
Мне ведь нужно, чтобы и другие поля были возвращены.
К тому же поля не числовые...
SELECT * FROM Table1 WHERE ID IN (SELECT Min(ID) FROM Table1 GROUP BY Field1)
ID должен быть автоинкрементом по синтаксису других баз (с генератором по синтаксису Firebird).
А если у меня нет поля ID? То есть, в базе нет ни одного уникального поля. Вот совокупность двух полей - уникальна.
И вообще:
SELECT Min(ID) FROM Table1 GROUP BY Field1
разве не вернет всего одну запись?
Anatoly Podgoretsky (2004-05-10 15:46:00) [12]sniknik © (10.05.04 15:39) [20]
Такое иногда нужно в отчетах, а там это решается элементарно, а вод вывод в грид, придется покрутиться, подменяя информацию в буферах или в возвращаемом результате. Количество Some естесвенно может достигать внушительных размеров и при том быть не сортированым, что еще значительнее усложняет задачу, но мы то можем только гадать и каждый по мере своей испорченности.
sniknik (2004-05-10 15:39:00) [13]да но если это так > [18] то это так просто (запросом) не решить, или очень навороченным и ограниченным (на количество возможных Some к примеру) или процедурой.
Anatoly Podgoretsky (2004-05-10 15:32:00) [14]Lola © (10.05.04 15:24) [18]
Может быть, как обычно невнятно объяснено.
Lola (2004-05-10 15:24:00) [15]Я конечно дико извиняюсь, что вмешиваюсь в спор титанов, но мне почему-то показалось, что вопрос стоит о том, чтобы значение поля Some выводилось только в первой строке, а в остальных записях, где значение повторяется, выводилось пустое значение. Тогда никакие другие данные не будут потеряны.
Anatoly Podgoretsky (2004-05-10 15:14:00) [16]И чего стулья ломаете, разные это вещи первичный ключ и (авто)инкриметные поля. Не пересекаются, хотя оба обеспечивают уникальность (для случая авто).
sniknik (2004-05-10 15:14:00) [17]именно на это запрос завязан, оно должно возрастать, и ему вовсе не обязательно ему быть уникальным, и ключевым, повторения будут дублироватся и все (хотя и не должны по условию если оно инкрементируется, но не смертельно, сразу видно глюк в данных).
p.s. сними шоры с глаз. ID не обязан быть ключем только потому что ты так привык, также не обязан быть уникальным потому что по твоему оно так называется. (прочитай [8] еще раз, там дан тот минимум что необходим по условию, а вот все что ты себе навоображал вот это как раз не имеет значения)
Курдль (2004-05-10 14:58:00) [18]
> оно необязательно должно быть первичным ключем, обязательно
> должно возрастать (инкремент), или убывать.
Да никому не интересно, по какому закону оно меняется (убывает, возрастает, логарифмически, экспоненциально и т.п.) главное, чтобы не повторялось! Это и называется уникальное поле!
sniknik (2004-05-10 14:54:00) [19]оно необязательно должно быть первичным ключем, обязательно должно возрастать(инкремент), или убывать.
Курдль (2004-05-10 14:45:00) [20]
> MSSQL
> incremental values
> incrementally updating cubes
> incrementally updating dimensions
>
> а Вы что имели ввиду?
Я имел в виду понятия из теории реляционных баз данных, а Вы?