Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1
  • 2
  • 3
  • 4

ТЕМА:

Re: Oracle: Эффективен ли запрос если в условии джойна есть >=? 12 года 7 мес. назад #3372

Раз есть желающие поразбираться, давайте. Возьмем одного сотрудника и пару отчетов за даты с разными ставками.

Допустим сотрудник 1 работал таким образом

таблица WORK
ID     EMPLOYEE_ID      WORK_DATE      WORK_DURATION 

---------- ---------- -------------------- ---------- 


         1          1          11-04-2003          8 

         2          1          12-04-2003          8 

         3          1           3-05-2003          6 

         4          1           4-05-2003          9 

Его почасовая ставка с 1 апреля 40 а с 1 мая 60 баков (быстро он поднялся!).

таблица HOUR_RATE
ID     EMPLOYEE_ID     CHANGE_DATE     RATE_VALUE 

---------- ---------- -------------------- ---------- 


         1          1           1-04-2003         40 

         2          1           1-05-2003         60 

Чуть чуть модифицируем исходный запрос, чтобы увидеть что же все таки суммируется
SELECT 

WORK.EMPLOYEE_ID, 

WORK.WORK_DATE,

WORK.WORK_DURATION,

HOUR_RATE.RATE_VALUE,

(WORK.WORK_DURATION*HOUR_RATE.RATE_VALUE) AS COSTS

 

FROM WORK, HOUR_RATE 



WHERE 

WORK.EMPLOYEE_ID = HOUR_RATE.EMPLOYEE_ID AND

WORK.WORK_DATE >= HOUR_RATE.CHANGE_DATE AND



HOUR_RATE.CHANGE_DATE = (SELECT MAX(CHANGE_DATE) FROM HOUR_RATE WHERE CHANGE_DATE <= WORK.WORK_DATE)



ORDER BY WORK.WORK_DATE

получаем (спул все таки класная штука!)
EMPLOYEE_ID      WORK_DATE      WORK_DURAT RATE_VALUE    COSTS   

---------- -------------------- ---------- ---------- ---------- 


         1          11-04-2003          8         40        320 

         1          12-04-2003          8         40        320 

         1           3-05-2003          6         60        360 

         1           4-05-2003          9         60        540 


возвращаясь к сумме имеем
EMPLOYEE_ID   COSTS   

---------- ---------- 


         1       1540

Все ОК!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Daymon.

Re: Oracle: Эффективен ли запрос если в условии джойна есть >=? 12 года 7 мес. назад #3373

Так я ж сразу спросил, duration может пересекать изменение ставки или нет. Я трактовал duration как длительность работы в днях. И кажется не только я - об этом свидетельствует разговор о "елках".

А что касается "раз есть желающие поразбираться", то ваш изначальный запрос был неверен :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Эффективен ли запрос если в условии джойна есть >=? 12 года 7 мес. назад #3374

Спасибо!

Особенно за важные примечания. Чтобы вообще все было ОК, надо добавить валидацию WORK_DURATION - не более 24 часов в день.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Эффективен ли запрос если в условии джойна есть >=? 12 года 7 мес. назад #3375

И вдогонку... :)
А разве эта проверка необходима?
WORK.WORK_DATE >= HOUR_RATE.CHANGE_DATE

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Эффективен ли запрос если в условии джойна есть >=? 12 года 7 мес. назад #3376

Проверил... - выходит что нет! Блиин, надо же!!!

Теперь мне известен очень неплохой query optimizer, спасибо)))

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Эффективен ли запрос если в условии джойна есть >=? 12 года 7 мес. назад #3377

Есть один недостаток - плохой parse to execute ratio ))
Но ничего, при шаровом CPU time не так уж страшно :-)))

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
  • 3
  • 4
Время создания страницы: 0.234 секунд