Главная страница
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.041 c
2-1171982875
VovkaN
2007-02-20 17:47
2007.03.11
Как указать temp-файлам .db при работе BDE другую папку?


3-1166111990
The X
2006-12-14 18:59
2007.03.11
Изменение структуры полей Paradox.


15-1171283075
WondeRu
2007-02-12 15:24
2007.03.11
Vista для разработчика


2-1171886181
lorn
2007-02-19 14:56
2007.03.11
web deploys


1-1168517346
Rentgen
2007-01-11 15:09
2007.03.11
создать клон формы с компонентами