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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2010, 17:44   #1
kiril111
Новичок
Джуниор
 
Регистрация: 07.08.2010
Сообщений: 2
По умолчанию Выборка из уже выбранных данных

Здравствуйте, долг мучает вопрос. Ситуация такая, есть две таблицы первая - сотрудники, вторая - оклады сотрудников. Т.е одному сотруднику может быть присвоено несколько окладов, предположим каждый месяц - новый оклад. Это я реализовал так: при нажатии на строку в DBGridе, например с Петровым, в другом DBGridе отображаются все существующие оклады этого Петрова, но не приложу ума, как высчитать MAX или MIN оклад у этого петрова, подскажите если сталкивались с таким..буду очень признателен.
kiril111 вне форума Ответить с цитированием
Старый 09.08.2010, 17:59   #2
pobedin
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 105
По умолчанию

sql запросом...
Код:
SELECT MAX(column_name) FROM table_name WHERE fio='Петров'
...
Код:
SELECT MIN(column_name) FROM table_name WHERE fio='Петров'
pobedin вне форума Ответить с цитированием
Старый 09.08.2010, 22:53   #3
kiril111
Новичок
Джуниор
 
Регистрация: 07.08.2010
Сообщений: 2
По умолчанию

Неразумно писать SQL запрос для каждой записи из таблицы,потому как база может содержать и ни одну сотню записей,но как это реализовать ума не приложу.....
kiril111 вне форума Ответить с цитированием
Старый 10.08.2010, 09:39   #4
pobedin
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 105
По умолчанию

нужно конкретней формулировать условие задачи.
мне кажется, что неразумно будет писать для каждый записи таблицы какой-либо другой способ вычисления макс/мин значений.
используйте параметрический запрос и сравнивать ФИО с новый значением. получится один запрос со множеством параметров.
pobedin вне форума Ответить с цитированием
Старый 10.08.2010, 11:03   #5
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

не знаю как у вас это реализованов базе, но вот вам простой примерчик
Код:
with 
  employee as (
  select 1 id, 'Petroff' fio from dual union all
  select 2, 'Sidoroff' from dual union all
  select 3, 'Ivanoff' from dual
  ),
  salary as (
  select 1 id, 10000 amount, to_date('01.01.2010', 'DD.MM.YYYY') date_set from dual union all
  select 1, 12000, to_date('01.02.2010', 'DD.MM.YYYY') from dual union all
  select 1, 15000, to_date('01.03.2010', 'DD.MM.YYYY') from dual union all
  select 1, 20000, to_date('01.04.2010', 'DD.MM.YYYY') from dual union all
  select 1, 22000, to_date('01.05.2010', 'DD.MM.YYYY') from dual union all
  select 1, 27000, to_date('01.06.2010', 'DD.MM.YYYY') from dual union all
  select 1, 32000, to_date('01.07.2010', 'DD.MM.YYYY') from dual union all
  select 1, 35000, to_date('01.08.2010', 'DD.MM.YYYY') from dual union all
  select 2, 20000, to_date('01.02.2010', 'DD.MM.YYYY') from dual union all
  select 2, 25000, to_date('01.03.2010', 'DD.MM.YYYY') from dual union all
  select 2, 30000, to_date('01.04.2010', 'DD.MM.YYYY') from dual union all
  select 2, 35000, to_date('01.05.2010', 'DD.MM.YYYY') from dual union all
  select 2, 40000, to_date('01.06.2010', 'DD.MM.YYYY') from dual union all
  select 2, 45000, to_date('01.07.2010', 'DD.MM.YYYY') from dual union all
  select 2, 55000, to_date('01.08.2010', 'DD.MM.YYYY') from dual union all
  select 3, 50000, to_date('01.05.2010', 'DD.MM.YYYY') from dual union all
  select 3, 60000, to_date('01.06.2010', 'DD.MM.YYYY') from dual union all
  select 3, 70000, to_date('01.07.2010', 'DD.MM.YYYY') from dual union all
  select 3, 90000, to_date('01.08.2010', 'DD.MM.YYYY') from dual  
  )
  
select
  emp.id,
  emp.fio,  
  min(sal.amount) min_amount,
  max(sal.amount) max_amount
from 
  employee emp,
  salary sal
where 0=0
  and sal.id = emp.id
group by emp.id, emp.fio
order by emp.fio
а вот результат по тестовым данным
Цитата:
3 Ivanoff 50000 90000
1 Petroff 10000 35000
2 Sidoroff 20000 55000
soleil@mmc вне форума Ответить с цитированием
Старый 12.08.2010, 17:11   #6
GenniY
Форумчанин
 
Регистрация: 09.09.2009
Сообщений: 181
По умолчанию

Я может бы не так понял, но что Вас не устраивает в запросе?
Код:
select min(name_colum), max(name_colum) from table_name where colum_name2 = 'ПЕТРОВ'
Вы же в данное время просматриваете информацию только об ОДНОМ сотруднике!
И отправляете в БД некий запрос о получении данных в GRID -окладов. Ну и получите при этом min и max. Всё.
Получил помощь — отблагодарил.
GenniY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка данных segail Microsoft Office Excel 4 08.02.2010 16:37
Выборка из базы данных fygas1991 PHP 3 07.12.2009 23:54
Выборка из БД определённых данных Xeon332 PHP 2 19.11.2009 14:02
Выборка данных ADRENALIN86 Microsoft Office Excel 1 13.08.2009 15:51
Выборка данных из StringGrid quqer БД в Delphi 1 14.03.2008 12:56