Показать полную графическую версию : [решено] SQL Выбор записей с максимальным значением
Любезный
13-06-2011, 11:48
Ничего не понял.
Нужно из таблицы Людей выбрать всех людей и проставить и максимальное ID из таблицы Nachislenie, если такого нет то проставить 0(или null). »
Если у Иванова в таблице Nachislenie начисление с максимальным id - 21875, а у петрова в таблице nachislenie нет ничего. Должно получиться: »
А что, разве в той выборке, которая уже есть, что-то не так?
tarakan1983
13-06-2011, 12:10
та выборка отбирает только из одной таблицы, а вот эта из двух
SELECT L.ID,L."LASTNAME",T.MaxId,n.* FROM FL L LEFT JOIN (SELECT L1.ID,MAX(N1.ID) AS MaxId FROM FL L1,NACHISLENIE N1 WHERE L1.ID=N1.ID_FL GROUP BY L1.ID) T ON T.ID=L.ID LEFT JOIN NACHISLENIE N ON N.ID=T.MaxId
tarakan1983
13-06-2011, 13:01
Все конечно отлично, но если записей оооооооочень много, а комп древний то подвисает программка, не в курсе случайно куда засунуть Application.ProcessMessages, а еще было бы круче как отобразить процесс в progressbare?
Любезный
13-06-2011, 18:31
Не понял... Вы же написали, через какую программу Вы работаете. У вас есть её исходники? Зачем засовывать ProcessMessages в чужую прогу?
tarakan1983
13-06-2011, 20:40
SQL Manager for InterBase & Firebird я использую для отладки скриптов SQL, чтобы убедиться в правильноти работы select * from ..., потом в delphi использую компонент ibquery. Вот я добавил выше указаннный скрипт в IbQuery и сделал его active равным true, если записей много то моя программа замерзает. SQL Manager for InterBase & Firebird это обыкновенный менеджер по работе с БД InterBase & Firebird.
Любезный
13-06-2011, 21:01
Виснет при Active:=true или при обходе записей?
Индексы на таблицы задавались? А первичные и внешние ключи?
tarakan1983
13-06-2011, 21:02
Первичные ключи да, Индексы и внешние ключи нет.
Любезный
13-06-2011, 22:57
Хорошо бы Вам про индексы почитать в книжке по БД - их создание должно ускорить процесс выборки.
tarakan1983
13-06-2011, 23:01
Вот сейчас почитал и создал пару индексов, но все равно, выборка записей идет из таблицы где больше 10000 записей и висяк присутствует.
Любезный
14-06-2011, 00:13
ProcessMessages на самом деле засовывать некуда, ибо сама выборка ведётся на сервере.
На мой взгляд, 10 тыс записей - это не так уж много. Наверно, Вам лучше обратиться на профильный форум SQL.RU - там, полагаю, смогут подсказать, как создавать индексы правильно.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC