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

Откуда:
Сообщений: 335
SELECT   t.interval2, SUM (t.summ)
    FROM (SELECT TO_DATE ('11/10/06', 'DD/MM/YY') dbeg,
                 TO_DATE ('11/09/07', 'DD/MM/YY') dend, -131 INTERVAL,
                 10 summ, 2 interval2
            FROM DUAL
          UNION ALL
          SELECT TO_DATE ('08/01/06', 'DD/MM/YY'),
                 TO_DATE ('08/01/07', 'DD/MM/YY'), -31, 5, 1
            FROM DUAL
          UNION ALL
          SELECT TO_DATE ('17/07/06', 'DD/MM/YY'),
                 TO_DATE ('07/08/08', 'DD/MM/YY'), -373, 15, 3
            FROM DUAL
          UNION ALL
          SELECT TO_DATE ('26/07/06', 'DD/MM/YY'),
                 TO_DATE ('26/07/07', 'DD/MM/YY'), -25, 20, 1
            FROM DUAL) t
GROUP BY t.interval2
interval2 - получаеться функцией в которую передаем INTERVAL(IF'ами проверяем куда попадает и возвращаем ид интервала, до 50 дней, до 100 и т.д.), можно ли както обойтись без самописной функции и определять это сразу в селекте(аналитика, декоде?)?и будет ли это быстрее?

з.ы. оракл 8.1.7

Я брошу все и войду в твое положение
19 июл 07, 09:54    [4407474]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
Volder
Member

Откуда: Москва
Сообщений: 474
nikopol
можно ли както обойтись без самописной функции и определять это сразу в селекте(аналитика, декоде?)?
можно
nikopol

и будет ли это быстрее?
будет

решение бы Вам написали, если бы вы логику пояснили

interval у Вас - отрицательные числа
как вы там что проверяете (до 50 дней, от 50 до 100 и т.д.) - не понятно
если берете интервал, как разницу между DEND и DBEG - то опять же не понятно как получился INTERVAL2=1 в первой строке - там разница явно не 50 дней.

Уточняйте.
19 июл 07, 10:05    [4407544]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
nikopol
Member

Откуда:
Сообщений: 335
Volder
nikopol
можно ли както обойтись без самописной функции и определять это сразу в селекте(аналитика, декоде?)?
можно
nikopol

и будет ли это быстрее?
будет

решение бы Вам написали, если бы вы логику пояснили

interval у Вас - отрицательные числа
как вы там что проверяете (до 50 дней, от 50 до 100 и т.д.) - не понятно
если берете интервал, как разницу между DEND и DBEG - то опять же не понятно как получился INTERVAL2=1 в первой строке - там разница явно не 50 дней.

Уточняйте.

за '-' и DEND и DBEG извиняйте, выдирал и упрошал. числовые значения конечно положительные. есть некоторая отчетная дата 01/07/07 вот из нее и вычитаем DEND и берем abs
интервалы:
IF D_P_K IS NULL OR D_P_K < 0 THEN
            RETURN 210;
          ELSIF D_P_K < 2 THEN
            RETURN 211;
          ELSIF D_P_K < 6 THEN
            RETURN 212;
          ELSIF D_P_K < 11 THEN
            RETURN 213;
          ELSIF D_P_K < 21 THEN
            RETURN 214;
          ELSIF D_P_K < 31 THEN
            RETURN 215;
          ELSIF D_P_K < 91 THEN
            RETURN 216;
          ELSIF D_P_K < 181 THEN
            RETURN 217;
          ELSIF D_P_K < 271 THEN
            RETURN 218;
          ELSE
            RETURN 219;
         END IF;
19 июл 07, 10:22    [4407679]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
Volder
Member

Откуда: Москва
Сообщений: 474
nikopol

.. выдирал и упрошал...
да и сейчас похоже тоже "выдирали и упрошали"

вся логика IF может быть записана через CASE в чистом SQL.
19 июл 07, 10:31    [4407752]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
nikopol
Member

Откуда:
Сообщений: 335
Volder
nikopol

.. выдирал и упрошал...
да и сейчас похоже тоже "выдирали и упрошали"

вся логика IF может быть записана через CASE в чистом SQL.

ифы выдраны из функции в пакете,
SELECT TO_DATE ('11/10/06', 'DD/MM/YY') dbeg,
                 TO_DATE ('11/09/07', 'DD/MM/YY') dend, 131 INTERVAL,
                 10 summ,  mypakage.myfunc(131)
            FROM DUAL
19 июл 07, 10:44    [4407876]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Попробуйте обяснить ещё раз с нуля, что есть и что надо. Пока не получилось.
19 июл 07, 10:44    [4407885]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
nikopol
Member

Откуда:
Сообщений: 335
Jannny
Попробуйте обяснить ещё раз с нуля, что есть и что надо. Пока не получилось.

есть:
select t.date1, t.dend, t.dend-t.date1, mypakage.myfunc(t.dend-t.date1) interval
from mtable t

date1 dend dend-date1 interval
07/01/07 03/06/08 249 218
07/01/07 19/06/08 354 219
07/01/07 14/09/07 75 216
07/01/07 19/06/08 354 219
07/01/07 22/05/08 326 219
07/01/07 11/02/07 124 217


в mypakage.myfunc имеем:
IF D_P_K IS NULL OR D_P_K < 0 THEN
            RETURN 210;
          ELSIF D_P_K < 2 THEN
            RETURN 211;
          ELSIF D_P_K < 6 THEN
            RETURN 212;
          ELSIF D_P_K < 11 THEN
            RETURN 213;
          ELSIF D_P_K < 21 THEN
            RETURN 214;
          ELSIF D_P_K < 31 THEN
            RETURN 215;
          ELSIF D_P_K < 91 THEN
            RETURN 216;
          ELSIF D_P_K < 181 THEN
            RETURN 217;
          ELSIF D_P_K < 271 THEN
            RETURN 218;
          ELSE
            RETURN 219;
         END IF;
возник вопрос стоит ли заменять вызов функции на какую нибудь конструкцию СКЛ, если это даст выигрыш в скорости и производительности и на какую
19 июл 07, 10:53    [4407974]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Если вопрос только в том, чтобы заменить этот оператор if на sql конструкцию, то ответ уже был (вроде как case в 8i уже был). Правда непонятно, что такое D_P_K, но наверное это как раз разница дат.
19 июл 07, 11:01    [4408065]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
nikopol
Member

Откуда:
Сообщений: 335
Jannny
Если вопрос только в том, чтобы заменить этот оператор if на sql конструкцию, то ответ уже был (вроде как case в 8i уже был). Правда непонятно, что такое D_P_K, но наверное это как раз разница дат.

D_P_K, но наверное это как раз разница дат - угу, входной параметр в myfync, а ускорит ли CASE выполнение запроса?
19 июл 07, 11:05    [4408108]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
malabay
Member

Откуда:
Сообщений: 113
Конечно ускорит, либо ты будешь применять функцию n-цать раз, либо все сделаешь за один прогон. Переключение контекста однако....
19 июл 07, 11:10    [4408166]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
nikopol
Member

Откуда:
Сообщений: 335
malabay
Конечно ускорит, либо ты будешь применять функцию n-цать раз, либо все сделаешь за один прогон. Переключение контекста однако....

выглядит не так компактно :(
и ПЛ/СКЛ машина в 8.1.7 CASE в селектах(курсорах) если я не путаю не понимает :(
19 июл 07, 11:30    [4408364]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
Лапохвост
Member

Откуда: За десять рублей размещу сообщение.
Сообщений: 20952
nikopol
malabay
Конечно ускорит, либо ты будешь применять функцию n-цать раз, либо все сделаешь за один прогон. Переключение контекста однако....

выглядит не так компактно :(
и ПЛ/СКЛ машина в 8.1.7 CASE в селектах(курсорах) если я не путаю не понимает :(

Правы-нет CASE нет, так а что раньше молчали? Тут вроде телепатов не очень много.
19 июл 07, 11:43    [4408496]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116133
Лапохвост
Правы-нет CASE нет, так а что раньше молчали? Тут вроде телепатов не очень много.


Читателей тоже. Перечитайте плиз первый пост автора.
19 июл 07, 11:46    [4408523]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
Лапохвост
Member

Откуда: За десять рублей размещу сообщение.
Сообщений: 20952
dmidek
Лапохвост
Правы-нет CASE нет, так а что раньше молчали? Тут вроде телепатов не очень много.

Читателей тоже. Перечитайте плиз первый пост автора.

Даже очки не помогли мне увидеть, что автор упоминает об использовании курсора, а следовательно PL/SQL. А в чистом SQL CASE вроде как работает... Или я не прав?
19 июл 07, 11:53    [4408588]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116133
Лапохвост
dmidek
Лапохвост
Правы-нет CASE нет, так а что раньше молчали? Тут вроде телепатов не очень много.

Читателей тоже. Перечитайте плиз первый пост автора.

Даже очки не помогли мне увидеть, что автор упоминает об использовании курсора, а следовательно PL/SQL. А в чистом SQL CASE вроде как работает... Или я не прав?


Подумал, что Вы имеете в виду, что автор не указал версию Oracle .
Я тоже не телепат :-)
19 июл 07, 11:56    [4408608]     Ответить | Цитировать Сообщить модератору
 Re: Определить к какому интервалу относиться дата  [new]
malabay
Member

Откуда:
Сообщений: 113
nikopol
malabay
Конечно ускорит, либо ты будешь применять функцию n-цать раз, либо все сделаешь за один прогон. Переключение контекста однако....

выглядит не так компактно :(
и ПЛ/СКЛ машина в 8.1.7 CASE в селектах(курсорах) если я не путаю не понимает :(

Зато UNION ALL точно есть )
19 июл 07, 12:07    [4408693]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить