Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Помогите оптимизировать запрос  [new]
serpentariy
Member

Откуда:
Сообщений: 265
Здравствуйте Все! Помогите оптимизировать запрос.
Дано:
Таблица t1:
idf1
10
21
Таблица t2:
iddatap1p2
1633
11045
1266100
253100
Надо:
idd1d2p1p2
10633
161045
1102666
126267100
2153100
Делаю так:
SELECT t2.id, nz((select a.data from t2 as a where a.p1=(select max(b.p1) from t2 as b where b.id=a.id and b.p1<t2.p1) and a.id=t1.id),t1.f1) as d1, t2.data as d2, t2.p1,
 iif(0=(select count(*) from t2 as c where c.id=t1.id and c.p2<>100),t2.p2,t2.p1) as p2
FROM t2 INNER JOIN t1 ON t2.id=t1.id
UNION SELECT t2.id, t2.data, t2.data, t2.p1+1,t2.p2
FROM t2
where t2.p1=(select max(a.p1) from t2 as a where a.id=t2.id) and 0<>(select count(*) from t2 as b where b.id=t2.id and b.p2<>100)
ORDER BY t2.id, t2.p1;
Как проще?
11 ноя 05, 12:41    [2059652]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
serpentariy
Member

Откуда:
Сообщений: 265
Обнаружил неточности в данных которые надо получить и в тексте запроса.
Подскажите как можно упростить нижеприведенный запрос?
Дано:
Таблица t1:
idf1
10
21
Таблица t2:
iddatap1p2
1633
11046
1267100
253100
Надо:
idd1d2p1p2
10633
161044
1101056
1102677
126268100
21533
2554100
Запрос:
SELECT t2.id,
nz((select a.data from t2 as a where a.p1=(select max(b.p1) from t2 as b where b.id=a.id and b.p1<t2.p1) and a.id=t1.id),t1.f1) AS d1,
t2.data AS d2, t2.p1, t2.p1 AS p2
FROM t2 INNER JOIN t1 ON t2.id=t1.id
UNION SELECT t2.id, t2.data, t2.data, t2.p1+1, t2.p2
FROM t2
WHERE t2.p1=(select max(a.p1) from t2 as a where a.id=t2.id) or (t2.p2-t2.p1>0)
ORDER BY t2.id, t2.p1;
11 ноя 05, 21:11    [2062130]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
А можно сформулировать задачу словами?
11 ноя 05, 21:45    [2062207]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
serpentariy
Member

Откуда:
Сообщений: 265
Таблица t1: id-код прибора учета; f1-начальное показание прибора учета
Таблица t2: id-код прибора учета; data-показание прибора учёта на конец месяца больше равный p1 и меньше равный p2
Надо показания всех приборов на начало и конец каждого месяца
p2=100 типа недостижимый момент времени, p1<>100
12 ноя 05, 14:59    [2063044]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить