Главная страница
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.48 MB
Время: 0.064 c
4-1162452106
novill
2006-11-02 10:21
2007.03.11
Как заставить логин-диалог WinXP открываться всегда в полном виде


6-1159950477
POINT
2006-10-04 12:27
2007.03.11
webbrowser


3-1165917881
homm
2006-12-12 13:04
2007.03.11
Не могу придумать как связать строки


15-1171562699
default
2007-02-15 21:04
2007.03.11
Кто писал программы наподобие ERwin и Rational Rose


15-1171371493
Vlad Oshin
2007-02-13 15:58
2007.03.11
cgi можно защитить от скачивания?