Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2011, 17:23   #1
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию SQL Выбор записей с максимальным значением

Помогите пожалуйста. Нужно из таблицы Людей выбрать всех людей и проставить им максимальное ID из таблицы Nachislenie, если такого нет то проставить 0(или null). Т.е. Если у Иванова в таблице Nachislenie начисление с максимальным id - 21875, а у петрова в таблице nachislenie нет ничего. Должно получиться:

Иванов ----------- 21875
Петров-------------0 (ну или null)

Таблица людей: ID, FIO
Таблица Nachislenie: ID, FIO, ID_FL
В таблице Nachislenie ID_FL это ID из таблицы Люлей.
Максимальное значение В таблице Nachislenie отбираю так
Код:
SELECT * 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
P.S. База *.GDB
tarakan1983 вне форума Ответить с цитированием
Старый 12.06.2011, 22:49   #2
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Не уверен, но мне кажется, что ,если решать все на стороне сервера, то без ХП тут не обойтись.
_Engine_ вне форума Ответить с цитированием
Старый 12.06.2011, 23:40   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
SELECT L.ID,L.FIO,
    (SELECT MAX(N.ID) FROM NACHISLENIE N WHERE N.ID_FL=L.ID) AS MaxId
  FROM TablicaLudey L
FIO в таблице начислений зачем?

+ не знаю, допускаются ли вложенные запросы, можно по другому:
Код:
SELECT L.ID,L.FIO,MAX(N.ID) AS MaxId
  FROM TablicaLudey L LEFT JOIN NACHISLENIE N ON N.ID_FL=L.ID
  GROUP BY L.ID,L.FIO
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 13.06.2011 в 00:02.
Аватар вне форума Ответить с цитированием
Старый 12.06.2011, 23:59   #4
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Кстати, да все просто
Цитата:
FIO в таблице начислений зачем?
Для денормализации ессно.
_Engine_ вне форума Ответить с цитированием
Старый 13.06.2011, 00:04   #5
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
SELECT L.ID,L.FIO,
    (SELECT MAX(N.ID) FROM NACHISLENIE N WHERE N.ID_FL=L.ID) AS MaxId
  FROM TablicaLudey L
FIO в таблице начислений зачем?
Не знаю, не я составлял таблицы. Итак больше половины базы перековырял.

Спасибо большое!!!
здесь отбирается максимальное поле ID и показывается в колонке MaxId, а если мне надо показать еще несколько полей из таблицы NACHISLENIE не подскажете что добавить?
tarakan1983 вне форума Ответить с цитированием
Старый 13.06.2011, 00:08   #6
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Код:
SELECT L.ID,L.FIO, N.MoePole.....
    (SELECT MAX(N.ID) FROM NACHISLENIE N WHERE N.ID_FL=L.ID) AS MaxId
  FROM TablicaLudey L
_Engine_ вне форума Ответить с цитированием
Старый 13.06.2011, 00:12   #7
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Пишу
Код:
SELECT L.ID,L.Lastname,  N.DOLG,
    (SELECT MAX(N.ID) FROM NACHISLENIE N WHERE N.ID_FL=L.ID) AS MaxId
  FROM fl L
Ругается
Цитата:
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
N.DOLG.
At line 1, column 28.
tarakan1983 вне форума Ответить с цитированием
Старый 13.06.2011, 00:14   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от _Engine_ Посмотреть сообщение
Код:
SELECT L.ID,L.FIO, N.MoePole.....
    (SELECT MAX(N.ID) FROM NACHISLENIE N WHERE N.ID_FL=L.ID) AS MaxId
  FROM TablicaLudey L
Круто

tarakan1983 Задайте нормально вопрос
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.06.2011, 00:22   #9
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Есть таблица с "Человеками" (FL) и есть таблица с начислениями(NACHISLENIE), надо выбрать всех людей из FL и сопоставить последние данные из NACHISLENIE. Если в NACHISLENIE ничего нет то показать ФИО и пустые строки.

Последний раз редактировалось tarakan1983; 13.06.2011 в 00:24.
tarakan1983 вне форума Ответить с цитированием
Старый 13.06.2011, 00:32   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Попробуйте так
Код:
SELECT L.ID,L.FIO,T.MaxId,N.D1,...,N.Dn
  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
или так
Код:
SELECT T.ID,T.FIO,T.MaxId,N1.D1,...,N1.Dn
  FROM (
    SELECT L.ID,L.FIO,MAX(N.ID) AS MaxId
      FROM FL L LEFT JOIN NACHISLENIE N ON N.ID_FL=L.ID
      GROUP BY L.ID,L.FIO) T
    LEFT JOIN NACHISLENIE N1 ON N1.ID=T.MaxId
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 13.06.2011 в 00:46.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение и вывод ячеек с максимальным значением Djai Microsoft Office Excel 3 03.01.2011 13:49
SQL запрос со значением даты papos SQL, базы данных 1 20.11.2010 23:35
Получить количество записей с определенным значением RamireZ БД в Delphi 7 04.06.2010 07:12
Выбор строки в ComboBox в соответствии с выбранным значением поля записи таблицы БД golt-andrej Помощь студентам 3 26.01.2010 11:21
Выбор записей в DBGrid-e artemavd БД в Delphi 12 16.05.2009 19:45