Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.008 c
7-24715
Булат
2003-06-24 10:18
2003.09.08
Как определить тип корпуса - АТ или АТХ?


1-24536
rtooo
2003-08-26 17:42
2003.09.08
Поиск текста в файле ПОМОГИТЕ!!!


6-24573
Samvel
2003-06-27 19:14
2003.09.08
Pageproducer


14-24623
Jacob
2003-08-21 18:49
2003.09.08
Проблема с запуском из командной строки


1-24526
3APA3A
2003-08-27 01:40
2003.09.08
Работа с RaveReport





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский