Главная страница
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.031 c
15-1171445382
ЮЮ
2007-02-14 12:29
2007.03.11
С днём Св. Валентина !!!


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


8-1144096949
Asics777
2006-04-04 00:42
2007.03.11
Как сделать поддержку скинов как в Light Alloy?


15-1171461962
IMHO
2007-02-14 17:06
2007.03.11
Опрос: программа для создания иконок


2-1171739873
DimitrySDA
2007-02-17 22:17
2007.03.11
Статистика подключения к Internet