powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / SQL needed: datediff from next row
4 сообщений из 4, страница 1 из 1
SQL needed: datediff from next row
    #36233821
msveta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые Гуру!
У меня есть таблица в IQ 12.7 следующей структуры:
T1:
key integer,
val float,
valTime datetime

В ней содержатся данные типа:
21, 123.55, 'Sep 29 2009 10:00:00"
21, 125.0, 'Sep 29 2009 10:00:20"
21, 133.25, 'Sep 29 2009 10:01:50"
21, 103.3, 'Sep 29 2009 10:02:10"

Мне нужно посчитать взвешенное по времени среднее значение для каждого key.
То есть что-то вроде:
(123.55 * 20 (first value was active for 20 seconds) + 125.0 * 90 + 133.25 * 20)/130

Кто-нибудь знает, как это сделать в SQL?

Заранее благодарю,
Света
...
Рейтинг: 0 / 0
SQL needed: datediff from next row
    #36234016
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавь в таблицу колонку - долгота значения
Код: plaintext
alter table t1 add valLength integer;

потом заполни ее:
Код: plaintext
1.
2.
update t1 set valLength = datediff(second, 
             (select min(valTime) from t1 as t1_1 where t1_1.key=t1.key and t1_1.valTime>t1.valTime),
             t1.valTime);
Сделай соответствующий триггер на заполнение/обновление таблицы.
а потом выбирай сколько угодно:
Код: plaintext
select key, sum(val * valLength)/sum(valLength) from t1 group by key

Ты ж в IQ, не бойся лишних колонок.
...
Рейтинг: 0 / 0
SQL needed: datediff from next row
    #36234760
msveta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

Во-первых, спасибо большое!
Вполне изящный SQL, и он работает. Одна проблема: на таблице в 1М записей этот update работает очень долго...

Какая-нибудь идея, как это оптимизировать?

Временные таблицы я не экономлю (как и колонки :-)), сколько надо, столько и будет.

Света
...
Рейтинг: 0 / 0
SQL needed: datediff from next row
    #36234846
msveta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

Еще один вопрос: что предпочтительнее с точки зрения скорости - работать с временными таблицами или использовать постоянные с разумными индексами?
Например, можно построить на таблице t1 индекс по ключу, предполагаю, это ускорит процесс.

Спасибо,
Света
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / SQL needed: datediff from next row
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]