Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Подскажите по запросу.  [new]
Guzya
Member

Откуда:
Сообщений: 361
Доброго времени!

Имеется запрос примерно такой

select DAYS(date1) - DAYS(date2) as Days, 
CASE WHEN (DAYS(date1) - DAYS(date2)) BETWEEN 0 AND 10 THEN '10' 
 WHEN (DAYS(date1) - DAYS(date2)) BETWEEN 11 AND 20 THEN '20'
 WHEN (DAYS(date1) - DAYS(date2)) BETWEEN 21 AND 30 THEN '30' END as Limit
from table1


Результат десятки, возможно сотни тысяч строк. Соответственно запрос достаточно долго выполняется.
Ситуация усложняется еще и тем, что один из столбцов varchar и к date его приходиться приводить.
Поэтому возник вопрос, можно ли в select вычислить DAYS(date1) - DAYS(date2) один раз и дальше в CASE использовать уже результат.
4 июл 18, 22:52    [21544365]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу.  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1423
Guzya,

у вас есть твердая уверенность, что вычисления делаются более одного раза?

синтаксически, можно запрос переписать так:

select days_1 - days_2 as Days 
     , CASE
         WHEN (days_1 - days_2) BETWEEN  0 AND 10 THEN '10' 
         WHEN (days_1 - days_2) BETWEEN 11 AND 20 THEN '20'
         WHEN (days_1 - days_2) BETWEEN 21 AND 30 THEN '30'
       END as Limit
  from ( 
          select DAYS(date1) as days_1, DAYS(date2) as days_2 
            from table1
       ) v

но не факт, что сервер не раскроет встроенное представление и не приведет запрос к первоначальному виду...
5 июл 18, 07:38    [21544670]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу.  [new]
Guzya
Member

Откуда:
Сообщений: 361
Спасибо.
6 июл 18, 12:22    [21549065]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить