Главная страница
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.059 c
15-1171326757
Трей
2007-02-13 03:32
2007.03.11
Принципы программирования математического решателя?


2-1171623868
vegarulez
2007-02-16 14:04
2007.03.11
Подскажите как серийник с винта считать...


15-1171357876
max999
2007-02-13 12:11
2007.03.11
Мастера, помогите ламаку)


2-1171645054
RedBanner
2007-02-16 19:57
2007.03.11
Хитрость


3-1166075069
Phoenix
2006-12-14 08:44
2007.03.11
Агрегирование с TClientDataSet