powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Банальный запрос по интервалу дат
14 сообщений из 14, страница 1 из 1
Банальный запрос по интервалу дат
    #39038356
dollar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. У меня банальный вопрос.

Необходимо написать запрос, который выдаст данные по интервалу дат только если переменная "stage" > 0.
Если "stage" = выборку по интервалу игнорировать, выбирать только по "contractid" и "agentid".

Правильно ли написан запрос?

Код: sql
1.
2.
3.
4.
5.
select t.*
 from MY_TABLE t
where t.contractid = :contractid
  and t.agentid = :agentid
  and ( (t.docdate between :from_date and :to_date and z(:stage) > 0) or z(:stage) = 0 )
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038362
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dollar_Необходимо написать запрос, который выдаст данные по интервалу дат только
если переменная "stage" > 0.
Если "stage" = выборку по интервалу игнорировать, выбирать только по "contractid" и "agentid".

Это два разных запроса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038364
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dollar_,

я хз что такое z? Но даже не вникая в суть запрос можно подскратить

Код: sql
1.
2.
3.
4.
5.
select t.*
 from MY_TABLE t
where t.contractid = :contractid
  and t.agentid = :agentid
  and ( (t.docdate between :from_date and :to_date) or z(:stage) <= 0 )
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038367
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы через union сделал.
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038381
dollar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

z = coalesce
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038389
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dollar_,

дык зачем нормальную встроенную функцию заменять непонятно чем. Или FB < 1.5?
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038392
dollar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,
Код: sql
1.
2.
3.
4.
5.
select t.*
 from MY_TABLE t
where t.contractid = :contractid
  and t.agentid = :agentid
  and ( (t.docdate between :from_date and :to_date and coalesce(:stage, 0) > 0) or coalesce(:stage, 0) = 0 )



автор>> дык зачем нормальную встроенную функцию заменять непонятно чем. Или FB < 1.5?
Денис, думаю это ведь не столь важно.

Так лучше?
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038394
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dollar_Так лучше?
Отстой в любом случае. Убери из запроса условие на интервал и используй клиентскую
фильтрацию. Хуже уже не будет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038398
dollar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Интервал как раз нужен. Хорошо, видимо не совсем корректно написал в топике.

В общем запрос должен отрабатывать в одном случае stage > 0 по интервалу, и игнорировать интервал если stage = 0
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038401
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dollar_,

чуток лучше. А теперь ответь на вопрос а что делать если stage < 0.

И до 3.0 это эффективно работать не будет, потому что индекс по t.docdate задействован не будет в любом случае.
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038406
dollar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

авторА теперь ответь на вопрос а что делать если stage < 0.

В stage будет либо NULL либо число

stage < 0 не будет
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038407
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dollar_запрос должен отрабатывать в одном случае stage > 0 по интервалу, и
игнорировать интервал если stage = 0
Получай на клиента полный result set и при stage > 0 дополнительно его фильтруй. В чём
проблема-то?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038418
dollar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

авторПолучай на клиента полный result set и при stage > 0 дополнительно его фильтруй. В чём
проблема-то?

Это отчет, и лишние манипуляции по отлову в result set значения stage тут никчему
...
Рейтинг: 0 / 0
Банальный запрос по интервалу дат
    #39038429
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dollar_Это отчет, и лишние манипуляции по отлову в result set значения stage тут
никчему
Значит пиши хранимую процедуру или execute block, который в зависимости от параметра будет
выполнять один или другой запрос. Потому что (повторяю медленно) это два совершенно разных
запроса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Банальный запрос по интервалу дат
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]