![]() |
SQL Выбор записей с максимальным значением
Есть таблица вида
id (уникальное поле)****Lastname****Firstname*****Fathername*****id_fl 1******************** Иванов******Иван******** Иванович*******3 2*********************Петров******Петр*********Петрович*******4 3*********************Сидоров*****Сидор********Сидорович*****5 4*********************Иванов******Иван*********Иванович******3 5*********************Петров******Петр**********Петрович*****4 6*********************Сидоров*****Сидор********Сидорович****5 7*********************Петров******Петр*********Петрович*****4 8*********************Иванов******Иван*********Иванович*****3 Нужно отобрать записи с максимальным ID, т.е. в данном примеры записи с id 5,6 и 7. Помогите пожалуйста. пишу Код:
select id_fl, MAX(id) from NACHISLENIE group by id_fl |
База данных какая?
Попробуй так. Код:
SELECT id, Lastname, Firstname, Fathername, id_fl FROM NACHISLENIE WHERE id>(MAX(id)-3) GROUP BY id_fl; |
|
LilLoco, ничего не понял...
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
З.Ы. И вообще из условия не ясно, что Вам нужно... |
Цитата:
|
Что значит "ругается"? Текст ошибки - в студию.
И ещё - версия Interbase/Firebird какая? |
Цитата:
|
Видоизмените, как описано в посте LiLoco. Должно помочь.
Кстати, что значит "с последними начислениями"? Последними по времени? Что за поле id_fl? |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Тогда - небольшую правку.
Код:
SELECT id, Lastname, Firstname, Fathername, id_fl FROM NACHISLENIE WHERE id>((SELECT MAX(id) FROM NACHISLENIE) - 3) GROUP BY id_fl; |
Цитата:
Цитата:
Код:
SELECT id, Lastname, Firstname, Fathername FROM NACHISLENIE a INNER JOIN ( SELECT id_fl, MAX(id) AS maxID FROM NACHISLENIE GROUP BY id_fl ) b ON a.id = b.maxID ORDER BY a.lastname |
Цитата:
|
Цитата:
|
Какие компоненты используете?
|
SQL Manager for InterBase & Firebird
|
Странно... Не пойму, почему не работал тот вариант.
Ну ладно. главное, что решение нашлось. |
Всем спасибо за участие
|
Прошу прощенья, сделал поспешный вывод или неправильно поставил задачу.
Нужно из таблицы Людей выбрать всех людей и проставить и максимальное ID из таблицы Nachislenie, если такого нет то проставить 0(или null). Т.е. Если у Иванова в таблице Nachislenie начисление с максимальным id - 21875, а у петрова в таблице nachislenie нет ничего. Должно получиться: Иванов ----------- 21875 Петров-------------0 (ну или null) |
Ничего не понял.
Цитата:
Цитата:
|
та выборка отбирает только из одной таблицы, а вот эта из двух
Код:
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 |
Все конечно отлично, но если записей оооооооочень много, а комп древний то подвисает программка, не в курсе случайно куда засунуть Application.ProcessMessages, а еще было бы круче как отобразить процесс в progressbare?
|
Не понял... Вы же написали, через какую программу Вы работаете. У вас есть её исходники? Зачем засовывать ProcessMessages в чужую прогу?
|
SQL Manager for InterBase & Firebird я использую для отладки скриптов SQL, чтобы убедиться в правильноти работы select * from ..., потом в delphi использую компонент ibquery. Вот я добавил выше указаннный скрипт в IbQuery и сделал его active равным true, если записей много то моя программа замерзает. SQL Manager for InterBase & Firebird это обыкновенный менеджер по работе с БД InterBase & Firebird.
|
Виснет при Active:=true или при обходе записей?
Индексы на таблицы задавались? А первичные и внешние ключи? |
Первичные ключи да, Индексы и внешние ключи нет.
|
Хорошо бы Вам про индексы почитать в книжке по БД - их создание должно ускорить процесс выборки.
|
Вот сейчас почитал и создал пару индексов, но все равно, выборка записей идет из таблицы где больше 10000 записей и висяк присутствует.
|
ProcessMessages на самом деле засовывать некуда, ибо сама выборка ведётся на сервере.
На мой взгляд, 10 тыс записей - это не так уж много. Наверно, Вам лучше обратиться на профильный форум SQL.RU - там, полагаю, смогут подсказать, как создавать индексы правильно. |
Время: 13:05. |
Время: 13:05.
© OSzone.net 2001-