Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

select distinct ... [D7, IB6.x]


Страницы:   1 2 3 4

3APA3A ©   (2004-09-16 20:31:00) 

Есть таблица -
 CREATE TABLE (ID INTEGER, REC_COUNT INTEGER);

 Если я пишу просто SELECT DISTINCT ID, REC_COUNT FROM TABLE1, то он выбирает мне (для примера) такую таблицу
 ID    REC_COUNT
 1        3
 1        4
 1        6
 2        1
 2        3
 4        2

 А мне надо
 ID    REC_COUNT
  1       3, 4, 6  (любое из этих значений)
  2       1, 3     (то же самое)
  4       2

 Каким запросом можно это сделать?


kaif   (2004-09-18 01:23:00) [41]

Разделяю недоумение Zacho и Johnmen-а.
Если эта таблица не нуждается в первичном ключе и никакой задаче, кроме той, что ты говоришь не служит, ни с чем не взаимодействует и никто на нее не ссылается, предлагаю сделать следующее:
1. Удалить все записи с дубликатами ID (Johnmen знает, как это сделать - для меня это черная магия)
2. Добавить первичный ключ на ID командой ALTER TABLE
3. Никогда больше не добавлять туда дубликаты. Все равно извлекать их будет нечем.


3APA3A   (2004-09-17 15:23:00) [42]

Я подразумевал Первичный Ключ, но только под "аббревиатурой"... =)


sniknik   (2004-09-17 14:54:00) [43]

а что вы имеете в виду под абревиатурой ПК?
Персональный компьютер? Почтовый клиент? ...?
обьясни, и я тебе скажу для чего оно может пригодится. ;о)

кстати индекс по id он бы пригодился. (проверь время запроса с группировкой на большом обьеме данных с индексом и без)


Johnmen   (2004-09-17 14:47:00) [44]

Теперь понятно.
А ответ уже был sniknik ©   (16.09.04 23:53) [9]


3APA3A   (2004-09-17 14:43:00) [45]

Да нет же. Время отличается максимум на 5 минут и тут уже несущественно - 14:09 или 14:12...


Johnmen   (2004-09-17 14:41:00) [46]

>3APA3A ©   (17.09.04 14:27) [16]
>С практической - так хочет заказчик, поскольку ему это очень удобно.

А что именно удобно ? Видеть не пойми чего, не несущее никакой информации ? :)))


3APA3A   (2004-09-17 14:27:00) [47]

Да, я на самом деле не совсем так, как в реальности сформулировал задачу, но необходимость в выборе "неизвестно" какого поля действительно есть.  Поле REC_COUNT на самом деле - время добавления этой записи, тип у него TIMESTAMP и нужно показывать одно любое время добавления этой записи (поскольку разница у них максимум в 5 минут).
 С логической точки зрения - смысла в этом не очень много.
 С практической - так хочет заказчик, поскольку ему это очень удобно.

Про ПК не рассказал потому, как не видел, чем они могут помочь в этой задаче (и оказался прав)

Я более-менее (скорее - менее) знаю теорию РСУБД, но в этой таблице мне на самом деле не нуженПК. Я просто не знаю зачем он мне здесь. Эта таблица никак не связана с другими, на нее также никто не ссылается, в ней всего 2 поля (int, timestamp)Если ПК и в этой ситуации нужен - объясните зачем.


Rule   (2004-09-17 14:22:00) [48]

Deniz ©   (17.09.04 13:44) [14]
ну в данном случае получается что надо выбрать в случайном порядке ...


Deniz   (2004-09-17 13:44:00) [49]

Поддерживаю про необходимость ПК, но приведу пример, где действительно необходимо выбрать из таблицы несколько случайных записей:
Есть список вопросов ~1000, студенту надо задать 5 из них!
Автор неполностью рассказал про задачу(возможно в таблице есть ПК), и поэтому возникли неприятности.


Rule   (2004-09-17 10:52:00) [50]

ДА недавно был такой же вопрос, ответа о смысле не последовало, помоему неправильно пославтена задача, вообще не логично получается, объясните мне дураку по каким критериям должно оставлять одно из правых значений, а ?, в случайном порядке или максимальное или минимальное и вообще зачем это надо


Johnmen   (2004-09-17 09:13:00) [51]

>3APA3A ©

>>Zacho ©   (17.09.04 08:32) [11]
>>зачем нужно значение из неизвестно какой записи ???

И мне это чрезвычайно интересно !


Zacho   (2004-09-17 08:32:00) [52]


> 3APA3A ©   (16.09.04 23:47) [8] [Новое
>сообщение][Ответить]
>to Zacho
>   Довольно просто отмазаться от ответа отослав к
> теории. Дело в том, что БД спроектирована правильно и
> не совсем ясно, что бы дало наличие ПК.

Это не отмазка, а просто намек на то, что с БД спроектированной не по теории ты получишь многочисленные проблемы.
Если в таблице нет ПК - то БД явно спроектирована неправильно, т.к. не удовлетворяет даже 1НФ. Почитай всё-таки теорию, что бы понять чем это грозит.

Для данной выборки наличие ПК ничем не поможет, зато поможет избежать аномалий в работе с данными.

И всё-таки, ответь (мне действительно интересно), зачем нужно значение из неизвестно какой записи ???


3APA3A   (2004-09-17 00:03:00) [53]

to sniknik
  Ваш ответ тоже буду иметь "в виду"... =))


sniknik   (2004-09-16 23:53:00) [54]

> Но на будущее буду иметь в виду такую конструкцию.
имей, но только ввиду! ;о))

select id, max(REC_COUNT) AS REC_COUNT from TABLE1 group by id


3APA3A   (2004-09-16 23:47:00) [55]

to Zacho
  Довольно просто отмазаться от ответа отослав к теории. Дело в том, что БД спроектирована правильно и не совсем ясно, что бы дало наличие ПК.

 to GannibalLector
  Да я и сделал через ХП. Не совсем так правда, но сделал.

 to P.N.P.
  Да. О таком запросе я не подумал. Но ХП все равно удобнее получилась...  Но на будущее буду иметь в виду такую конструкцию.

 Всем спасибо.


GanibalLector   (2004-09-16 21:28:00) [56]

Что неработает?
Пардон,все работает...Ошибся,млин.


P.N.P.   (2004-09-16 21:25:00) [57]

//GanibalLector ©   (16.09.04 20:53) [3]

//2 P.N.P.
//Не работает

Что неработает?
Результат какраз такой, какой нужен (только зачем :))


GanibalLector   (2004-09-16 21:15:00) [58]

Довольно криво,но надеюсь смысл понятен...Сам ужО подправишь

CREATE PROCEDURE fuck
RETURNS (
   V_ID INTEGER,
   V_REC INTEGER)
AS
DECLARE VARIABLE OLD_ID INTEGER;
begin
old_id=999;
for select id,rec_count from table1 into :v_id,:v_rec do
  begin
if (v_id<>:old_id)  then suspend  ;
old_id=v_id;
    end
end


select * from fuck => выдаст желаемый результат


Zacho   (2004-09-16 20:54:00) [59]

Не совсем понятно: а  какой смысл в получении непонятно какого значения ?
И какой смысл в таблице без ПК ? Может стоит просто перепроектировать БД/задачу и изучить теорию РСУБД ?


GanibalLector   (2004-09-16 20:53:00) [60]

2 P.N.P.
Не работает


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо