Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.11;
Скачать: CL | DM;

Вниз

Оптимизировать запрос   Найти похожие ветки 

 
Megabyte ©   (2006-12-12 11:21) [0]

База ремонта телофонов.
Есть таблицы:
Repairs R - в кот. единожды заносится ремонт одного аппарата;
Repair_progress RP - в кот. заносится каждый раз переход на след. этап ремонта.
Задача: Выяснить все повторные приходы телефонов на ремонт  за определенный период в процентном отношении от кол-ва всех ремонтов за период.

Уникальность телефона определяется полем IMEI
ПК ремонта - R.Repair_ID, ПК этапа ремонта - RP.Repair_progress_ID.
Таблицы связаны по Repair_ID; также в R.Curr_process_ID - указывает на текущий процесс из Repair_progress_ID.
R.reception_date - дата приема телефона;
P.progress_timestamp - дата перехода на данный этап;
P.repair_state_id = 13 - этап отгрузки телефона(условие того, что телефон отремонтировали).
select R.imei/*, count(R.imei)*/
from repairs R
where (length_str(R.imei) >= 15) and
(Cast(R.reception_date as date) between (current_date-30) and current_date) and
(R.imei = any
   (select distinct Rs.imei
   from repairs Rs, repair_progress P
   where (length_str(Rs.imei) >= 15) and
   (Rs.repair_id = P.repair_id) and (P.repair_state_id = 13) and
   (Cast(P.progress_timestamp as date) between - Cast(R.reception_date as date) = 90)
    ) )

Пока цель вообще выбрать все IMEI, кот. повторяются.
Если делать отдельно внешний запрос и внутренний(заменяя R.reception_date на какую-нить дату), то они выполняются быстро. Вместе запрос выполняется долго, больше минуты, как минимум.
Кто что подскажет?

з.ы. Пробовал строить индексы по полям типа TimeStamp(хз, насколько это полезно), IBExpert из по умолчанию не использует, да и в плане не дает прописывать.


 
Desdechado ©   (2006-12-12 12:46) [1]

ничего не понял
(Cast(P.progress_timestamp as date) between - Cast(R.reception_date as date) = 90) - вообще что-то косое


 
Megabyte ©   (2006-12-12 13:24) [2]

Закройте тему, уже нашел решение. :)

>Desdechado ©  (12.12.06 12:46) [1]

ничего не понял
(Cast(P.progress_timestamp as date) between - Cast(R.reception_date as date) = 90)

Там перепутал, не =, а <. Дата отгрузки телефона - дата последней приемки того же телефона< 90 дней


 
Desdechado ©   (2006-12-12 13:36) [3]

а что за between минус сравнение даты с числом?


 
Megabyte ©   (2006-12-12 15:32) [4]

Извини, криво скопировал. :) Просто запрос менял, делал с битвином...



Страницы: 1 вся ветка

Текущий архив: 2007.03.11;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.039 c
15-1171485372
Rouse_
2007-02-14 23:36
2007.03.11
Скайп реагирует на SoftIce


15-1171347018
Леприкон
2007-02-13 09:10
2007.03.11
Компонент для панели поиска


2-1171908960
Ezorcist
2007-02-19 21:16
2007.03.11
C:Array of Char S:string


15-1171307046
bmw0
2007-02-12 22:04
2007.03.11
Длинные числа


2-1171978891
vvv_spb
2007-02-20 16:41
2007.03.11
WordDocument