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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.10.2009, 14:23   #11
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
в вашем случае лучше создавать селективную_ХП
что-то я не понял... мне нужно в самой базе данных добавить процедуру, а потом эту процедуру уже вызывать при помощи запроса?!
SlavaSH вне форума
Старый 13.10.2009, 14:37   #12
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от SlavaSH Посмотреть сообщение
что-то я не понял... мне нужно в самой базе данных добавить процедуру, а потом эту процедуру уже вызывать при помощи запроса?!
да
я бы очень удивился если бы это нужно было мне

тут непонятки - у вас принципиальный вопрос решить это одним запросом или все равно как, главное - решить?
в первом случае рекомендую попытать гуру файрберда почему не кушается 2 поля в фильтрации и как это можно сделать еще на ФБ
во втором случае решение я написал (с учетом ваших ошибок выполнения)
soleil@mmc вне форума
Старый 13.10.2009, 15:14   #13
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
да
я бы очень удивился если бы это нужно было мне

тут непонятки - у вас принципиальный вопрос решить это одним запросом или все равно как, главное - решить?
в первом случае рекомендую попытать гуру файрберда почему не кушается 2 поля в фильтрации и как это можно сделать еще на ФБ
во втором случае решение я написал (с учетом ваших ошибок выполнения)
нет, все равно как решить.... вот только это не решает, к сожалению моей задачи... запрос немного не такой какой должен быть... быть может я неправильно объяснил что хочу.

Пример:

В таблице klient_uchet следующие записи:

key_klient key_uslugi type_uchet data
3 1 1 12.10.09
3 1 0 11.10.09
3 3 0 11.10.09


Если использовать тот запрос, который вы предлагаете, то при key_klient =3 и data=13.10.09 получится:
key_uslugi data
1 12.10.09
3 11.10.09

А мне нужно, чтобы в запрос попала только одна запись:
key_uslugi data
1 12.10.09

потому что последнее значение type_uchet для key_klient=3 и key_uslugi=1 было равно 1, а меня такие записи не интересуют...

надеюсь теперь понятно объяснил
SlavaSH вне форума
Старый 13.10.2009, 15:57   #14
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

в условии же стояло требование "для типов 0 и 2"
там где у вас дата 12 октября - тип = 1
эта запись вообще не должна туда попасть

ну и раз у вас все заработало - продолжайте развивать мысль под свои новые условия
soleil@mmc вне форума
Старый 13.10.2009, 17:02   #15
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
в условии же стояло требование "для типов 0 и 2"
там где у вас дата 12 октября - тип = 1
эта запись вообще не должна туда попасть

ну и раз у вас все заработало - продолжайте развивать мысль под свои новые условия
не знаю, что Вы имеете в виду под должна попасть эта запись или нет... но та запись, где дата 11 октября, key_uslugi=1, type_uchet=0 тоже не должна попасть, потому что 12 октября тип изменился, и эта последняя запись...

короче суть такая: мне нужно узнать какой тип учета для всех услуг конктретного клиента на определенную дату и отсеять из них те, у которых тип учета не равен 0 или 2.

А у меня получается совсем не то, что нужно.
SlavaSH вне форума
Старый 13.10.2009, 17:10   #16
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

вот текст стартового поста
причину непоняток я выделил жирным

Цитата:
Сообщение от SlavaSH Посмотреть сообщение
В базе данных имеется две таблицы:

USLUGI
поля:
KEY_USLUGI Integer
NAME_USLUGI Varchar

KLIENT_UCHET
поля:
KEY_KLIENT_UCHET Integer
KEY_USLUGI Integer
KEY_KLIENT Integer
DATA Date
TYPE_UCHET Integer

Требуется выбрать из таблицы USLUGI только те наименования, для которых в таблице KLIENT_UCHET последнее значение (максимальная дата) TYPE_UCHET было 0 или 2, определенное значение KEY_KLIENT и до определенной даты.
решение задачи соответствует вашему исходному заданию и все претензии только к себе
если нужно чтобы тип учета был не 0 или не 2, то и в условии запроса нужно писать
Код:
and ku.type_uchet not in (0, 2)
soleil@mmc вне форума
Старый 14.10.2009, 09:12   #17
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
вот текст стартового поста
причину непоняток я выделил жирным



решение задачи соответствует вашему исходному заданию и все претензии только к себе
если нужно чтобы тип учета был не 0 или не 2, то и в условии запроса нужно писать
Код:
and ku.type_uchet not in (0, 2)
все правильно я сказал в условии, может просто Вы меня не поняли... или я не могу объяснить. Именно последнее значение типа учёта должно быть 0 или 2, т.е. то, у которого максимальная дата. А если до этого значение типа учета было 0 или 2, а последнее - другое, то такие услуги меня не интересуют. На примере, который я привёл выше я это показал...

К сожалению, тот запрос, который вы предложили, не отсеивает те услуги, в которых тип учёта был 0 или 2, а потом изменился.
SlavaSH вне форума
Старый 14.10.2009, 10:27   #18
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

я считаю, что нужно яснее излагать свои мысли
тогда переделываем код ХП таким образом (я полагаю что в ФБ еще нет таких фунок как last_value())

Код:
set term ^ ;

create procedure sel$key_uslugi_by_date
(pKey_klient integer,
 pData date)
returns
(key_uslugi integer,
 data date)
as
declare variable type_uchet integer;
begin
  for 
    select 
      ku.key_uslugi,
      max(ku.data)
    from klient_uchet ku
    where 0=0
       and ku.type_uchet in (0, 2)
       and ku.key_klient = :pKey_klient
       and ku.data < :pData + 1
    group by ku.key_uslugi
  into :key_uslugi,
        :data 
  do begin
         select type_uchet
         from klient_uchet
         where 0=0
            and key_klient = :pKey_klient
            and key_uslugi = :key_uslugi
            and data = :data
         into :type_uchet;
         if (:type_uchet in (0, 2)) then begin
           suspend;
         end
  end;
end
^

set term ; ^
soleil@mmc вне форума
Старый 14.10.2009, 11:59   #19
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
я считаю, что нужно яснее излагать свои мысли
тогда переделываем код ХП таким образом (я полагаю что в ФБ еще нет таких фунок как last_value())

Код:
set term ^ ;

create procedure sel$key_uslugi_by_date
(pKey_klient integer,
 pData date)
returns
(key_uslugi integer,
 data date)
as
declare variable type_uchet integer;
begin
  for 
    select 
      ku.key_uslugi,
      max(ku.data)
    from klient_uchet ku
    where 0=0
       and ku.type_uchet in (0, 2)
       and ku.key_klient = :pKey_klient
       and ku.data < :pData + 1
    group by ku.key_uslugi
  into :key_uslugi,
        :data 
  do begin
         select type_uchet
         from klient_uchet
         where 0=0
            and key_klient = :pKey_klient
            and key_uslugi = :key_uslugi
            and data = :data
         into :type_uchet;
         if (:type_uchet in (0, 2)) then begin
           suspend;
         end
  end;
end
^

set term ; ^
Вот это то, что надо, большое спасибо... только как мне теперь, используя созданную процедуру, сделать нужный мне запрос?

И зачем писать where 0=0 ???
SlavaSH вне форума
Старый 14.10.2009, 12:17   #20
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

запросы во 2й половине поста №10
ХП в №18
совмести их

Цитата:
Сообщение от SlavaSH Посмотреть сообщение
И зачем писать where 0=0 ???
для красоты
soleil@mmc вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка данных из таблицы и составление отчета! WildKosha Microsoft Office Excel 20 25.02.2013 16:11
Выборка из таблицы Kenny Spark Microsoft Office Excel 4 16.07.2009 15:15
выборка из таблицы Screame Microsoft Office Excel 2 12.07.2009 19:55
ADO, выборка из таблицы. Roof БД в Delphi 2 09.07.2008 18:51
Выборка из таблицы ivp88 БД в Delphi 5 12.01.2008 14:36