![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
select distinct ... [D7, IB6.x]
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.
Не работает