Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Банальный запрос по интервалу дат / 14 сообщений из 14, страница 1 из 1
28.08.2015, 12:37
    #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
28.08.2015, 12:42
    #39038362
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банальный запрос по интервалу дат
dollar_Необходимо написать запрос, который выдаст данные по интервалу дат только
если переменная "stage" > 0.
Если "stage" = выборку по интервалу игнорировать, выбирать только по "contractid" и "agentid".

Это два разных запроса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.08.2015, 12:43
    #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
28.08.2015, 12:47
    #39038367
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банальный запрос по интервалу дат
Я-бы через union сделал.
...
Рейтинг: 0 / 0
28.08.2015, 12:56
    #39038381
dollar_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банальный запрос по интервалу дат
Симонов Денис,

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

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

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

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

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

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

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

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

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

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

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


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