Форум: "Потрепаться";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
ВнизSQL Найти похожие ветки
← →
MIN (2003-08-20 16:27) [0]Помогите PLZ
Не получается написать запрос.
Есть таблица в БД с тремя полями:
Tov_ID I
Data D
Cen N
Нужно получить Cen на Max(Data) по группам Tov_id
← →
KSergey (2003-08-20 16:28) [1]Тут вымираем, а он с глупостями всякими... ;)
Что получить? Просветите меня, что такое Cen
← →
stone (2003-08-20 16:32) [2]select * from Table t where t.Data = (select max(Data) from Table where Tov_ID = t.Tov_ID)
← →
clickmaker (2003-08-20 16:32) [3]KSergey © (20.08.03 16:28) [1]
Тут вымираем, а он с глупостями всякими... ;)
Что получить? Просветите меня, что такое Cen
Ти что, дарагой, нэ понимаишь? Есть таблиц, в нэй список товар, а есть цен на товар. Нужно запрос писать, цен определять, очэн нужно, дарагой!
← →
nikkie (2003-08-20 16:32) [4]>MIN
какая база?
← →
Sandman25 (2003-08-20 16:33) [5]
select tov_id, cen
from table t1
where data = (select max(data)
from table t2
where t2.tov_id = t1.tov_id
)
Работать будет медленно.
Если СУБД поддерживает временные таблицы, можно будет ускорить - на первом шаге записываем tov_id, max(data) во временную таблицу, на втором получаем результат.
← →
KSergey (2003-08-20 16:34) [6]clickmaker © (20.08.03 16:32)
KSergey © (20.08.03 16:28) [1]
Тут вымираем, а он с глупостями всякими... ;)
Что получить? Просветите меня, что такое Cen
Ти что, дарагой, нэ понимаишь? Есть таблиц, в нэй список товар, а есть цен на товар. Нужно запрос писать, цен определять, очэн нужно, дарагой!
Извиняюсь, поле же это, просмотрел, точно обкурился... фу ну в смысле обчитался форум этот, нифига уже не соображаю. Сваливать пора...
← →
stone (2003-08-20 16:35) [7]
> Sandman25 (20.08.03 16:33) [5]
Если правильно навесить индексы будет летать как реактивная
← →
MIN (2003-08-20 16:39) [8]Cen это название поля, а надо выбрать все значения
← →
Sandman25 (2003-08-20 16:42) [9]stone © (20.08.03 16:35)
Не уверен. Она же для каждой записи будет находить max(data) заново, не считаясь с тем, что для текущего tov_id его уже находили. Или какие-то оптимизаторы догадаются?
← →
stone (2003-08-20 16:52) [10]
> Sandman25 (20.08.03 16:42) [9]
Многое зависит от количества выбираемых записей. Не скажу на счет всех СУБД (хотя наверняка то же самое), но в MSSQL такие запросы проходят на ура. Время в основном тратится на перекачку результирующего набора данных, сам же запрос выполняет очень быстро. Если в результирующем запросе предполагается получить не большое (до 1000 записей) количество строк за счет наложения дополнительных ограничений, то запрос выполняется около секунды.
Проверено на таблице 18 млн. записей.
← →
Johnmen (2003-08-20 16:54) [11]http://sql.ru/forum/actualthread.aspx?bid=2&tid=44917
← →
MIN (2003-08-20 17:00) [12]Sandman25 спасибо за подсказку, но это я уже писал.
D5 виснет. А БД в Paradox 7
← →
Sandman25 (2003-08-20 17:02) [13]stone
Понятно, спасибо.
← →
Sandman25 (2003-08-20 17:05) [14]MIN
Сколько данных в таблице?
У меня на Informix на 5 тыс. находит ответ за полсекунды, а на 1.5 млн работает больше нескольких минут (я не дождался, прервал запрос, пока начальство по шее не надавало :-)). А Paradox работает гораздо медленнее серверных СУБД
← →
MIN (2003-08-20 17:18) [15]Sandman25
Данных не много,но запрос не "идет".
Пробовал в Access, через объединение запроса и таблицы-получается и работает относительно быстро.
← →
Sandman25 (2003-08-20 17:23) [16]Могу только посоветовать поэкспериментировать - оставить несколько сот строк в таблице и проверить выполнение запроса. Если тоже виснет, то дело в Paradox, иначе имеем просто очень длинный запрос. Сходите по ссылке Johnmen, там похожая проблема обсуждается. Жаль, что в Paradox нет хранимых.
Можно, конечно, еще select * from table order by tov_id, data desc
и фильтровать данные в клиенте (событие OnFilterRecord), показывая только первую запись для каждого tov_id.
← →
MIN (2003-08-20 17:25) [17]Да, Sandman25 кстати такой запрос описан у Райна Стивенса "SQL за 24 часа".
Попробовал еще раз Дельфя5 виснит.
← →
Sandman25 (2003-08-20 17:34) [18]Как насчет
"Можно, конечно, еще select * from table order by tov_id, data desc
и фильтровать данные в клиенте (событие OnFilterRecord), показывая только первую запись для каждого tov_id"
← →
MIN (2003-08-20 17:49) [19]Всем спасибо и до свидания!
Конец рабочего дня.
Продолжу париться завтра.
← →
MIN (2003-08-21 10:31) [20]Всем доброе утро!
Как насчет вчерашнего запросика SQL под Delphi?
Появились какие-нибудь идеи за ночь.
Я попробовал предложенные вчера варианты- старенькая машинка
жалобно скулит от нехватки памяти, а в ближайшие сто лет замены оргтехники не ожидается. В Access-е все переваривается за полторы минутки, а надо в Delphi. БД не большая - чуть больше 3000 строк в таблице.
← →
Palladin (2003-08-21 10:34) [21]Конечно, все всю ночь думали...
← →
MIN (2003-08-21 10:43) [22]А может кого бессонница мучает.
← →
stone (2003-08-21 10:46) [23]
> Попробовал еще раз Дельфя5 виснит.
Какое количество записей передается на клиента?
← →
MIN (2003-08-21 10:48) [24]stone
Порядка 4000
← →
stone (2003-08-21 11:07) [25]Из какой СУБД идет выборка? Сколько строк всего в таблице? Какие существуют индексы? Какие компоненты доступа к БД используются?
← →
MIN (2003-08-21 12:21) [26]stone! очень извиняюсь за долгое молчание.
GOOD_ID PRICE_I EDIT_TIME
4103 12,56 17.04.2001
4103 12,11 19.11.2003 <- нужно
4103 9,78 22.05.2002
4103 9,32 13.09.2002
4104 2,26 26.02.2001
4104 2,11 26.03.2002
4104 3,51 26.08.2003 <- нужно
Пытаюсь написать запрос в компоненте Query Delphi5, а строк в таблице 2822.
Этот вопрос аналогичен томуБ что находится на
http://sql.ru/forum/actualthread.aspx?bid=2&tid=44917
присланный уважаемым Johnmen.
---------------------------------------------------------------------- ----------
← →
stone (2003-08-21 12:42) [27]Ответ был и в этой ветке, есть в указанной тобой ссылке. В чем проблема?
← →
MIN (2003-08-21 15:14) [28]В роде бы получилось, но я написал так-
SELECT TOV_ID, DATA,CEN
FROM TovCen
GROUP BY TOV_ID, DATA, CEN
HAVING MAX( DATA) >= DATA
ORDER BY TOV_ID
У кого есть замечания прошу высказаться
← →
Sandman25 (2003-08-21 15:31) [29]MIN
Это работает? На любых данных? Даже если текущая цена не является максимальной?
← →
MIN (2003-08-21 16:10) [30]А мне и не нужна мах сена.
Нужна просто цена на махDATA в каждой группе товаров.
← →
Sandman25 (2003-08-21 16:13) [31]Я имел в виду, работает ли с такими данными
1 19.08.2003 15
1 18.08.2003 18
1 17.08.2003 12
Честно говоря, мне не совсем ясно, почему MAX(Data) берется именно для каждого tov_id, а не tov_id И cen.
Ладно, сейчас проверю на своей БД...
← →
Sandman25 (2003-08-21 16:15) [32]Проверил. Запрос не работает, просто возвращает все данные :)
← →
MIN (2003-08-21 17:19) [33]До запроса такие данные
TOV_ID DATE CEN
2743 03.01.01 16,1
2743 30.01.01 16,3
2743 04.06.01 15,9
2743 06.12.01 19
2743 18.02.02 19,54
2744 03.01.01 25,9
2744 06.12.01 30,7
2744 15.03.02 29,53
2745 19.09.01 36,5
2745 23.01.02 38,5
2745 31.01.02 37,11
2745 02.02.02 40,6
2745 20.02.02 40,6
2745 18.06.02 47,94
2746 06.12.01 31,8
2746 20.02.02 25,7
2746 14.03.02 21,99
после
2727 03.01.01 55,4
2729 20.02.01 49,3
2731 20.02.01 49,3
2743 18.02.02 19,54
2744 15.03.02 29,53
2745 18.06.02 47,94
2746 14.03.02 21,99
2747 03.06.02 25,37
2748 14.03.02 65,39
2749 10.12.02 34,34
2750 03.09.02 14,79
2751 25.02.02 33,14
2753 18.02.02 27,24
2754 14.03.02 46,31
2755 02.02.02 61
2756 02.02.02 61
2757 02.02.02 61
← →
Sandman25 (2003-08-21 17:23) [34]Запрос точно как в MIN (21.08.03 15:14)?
Странно.
← →
MIN (2003-08-21 17:24) [35]Запрос такой
SELECT A.TOV_ID, A."DATE", A. CEN
FROM Tov A
GROUP BY A.TOV_ID, A."DATE", A.CEN
HAVING MAX( A."DATE" ) >= A."DATE"
← →
MIN (2003-08-21 17:26) [36]Если вместо >= поставить просто =, то не работает.
← →
Sandman25 (2003-08-21 17:36) [37]Понятно, что ничего непонятно. В Informix возвращает все записи, select такой
select a.doc_type, a.bank_date, a.doc_num
from trn_docum a
group by a.doc_type, a.bank_date, a.doc_num
having max(a.bank_date) >= a.bank_date
Если ставлю = вместо >=, ничего не меняется.
Рад, что у Вас все работает. Никаких замечаний высказать не могу по причине непонимания и невоспроизводимости решения в моей системе :)
← →
MIN (2003-08-21 17:46) [38]К этому запросу навешал еще 5 таблиц (естественно проиндексировав) и получил результат, на своем "дохленьком Пентюхе" за почти 2 мин.
← →
MIN (2003-08-21 17:47) [39]До свидания!
Конец рабочего дня.
← →
Sandman25 (2003-08-21 17:48) [40]Счастливо.
Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.009 c