Помогите составить SQL запрос
Для начала надо определиться, что в данном случае значит проинтегрировать, т.к. функции пока никакой нет.
Вообще говоря ответ на этот вопрос не однозначен.
Вообще говоря ответ на этот вопрос не однозначен.
Ты сначала определись хотя бы, по какой формуле интегрировать будешь.
Можно интегрировать ступенчатый график, можно кусочно-линейный, а можно вообще многочлен n степени (n - количество точек-1)
Можно интегрировать ступенчатый график, можно кусочно-линейный, а можно вообще многочлен n степени (n - количество точек-1)
Почти то, что тебе нужно:
select
sumDateTime - lag(DateTime,1,:start_date) over (order by DateTime * Value)
from table
where DateTime>=:start_date and DateTime<=:end_date
select
sumDateTime - lag(DateTime,1,:start_date) over (order by DateTime * Value)
from table
where DateTime>=:start_date and DateTime<=:end_date
не работаед
18:42:32 select sumDateTime - lag(DateTime,1,'5-ДЕК-2007 00:00:00') over (order by DateTime * Value) from TAG_000205 where DateTime>='5-ДЕК-2007 00:00:00' and DateTime<='6-ДЕК-2007 00:00:00'
18:42:32 *
18:42:32 ORA-30483: функции окна в данном месте запрещены
18:42:32 *** Script stopped due to error ***
18:42:32 *** SCRIPT END : Session:ARORCL(1) 5-дек-2007 18:42:32 ***
18:42:32 End SQL Editor Execution
Так попробуй:
select sum(Value) from (
select (DateTime - lag(DateTime,1,:start_date) over (order by DateTime * Value as Value
from table where DateTime>=:start_date and DateTime<=:end_date
)
select sum(Value) from (
select (DateTime - lag(DateTime,1,:start_date) over (order by DateTime * Value as Value
from table where DateTime>=:start_date and DateTime<=:end_date
)
Решил задачу
Проблема была в том, что надо было както отконвертить тип данных INTERVAL в NUMBER
select sum(value) from (SELECT EXTRACT(HOUR FROM (DateTime - lag(DateTime,1,'5-ДЕК-2007 00:00:00') over (order by DateTime*3600 +
EXTRACT(MINUTE FROM (DateTime - lag(DateTime,1,'5-ДЕК-2007 00:00:00') over (order by DateTime*60 +
EXTRACT(SECOND FROM (DateTime - lag(DateTime,1,'5-ДЕК-2007 00:00:00') over (order by DateTime*value as value
from TAG_000205
where DateTime>='5-ДЕК-2007 00:00:00' and DateTime<='6-ДЕК-2007 00:00:00')
Проблема была в том, что надо было както отконвертить тип данных INTERVAL в NUMBER
Оставить комментарий
Gasparfx
Есть таблица с 2 полями: DateTime, ValueВ таблицу в определённые промежутки времени (неравномерные) записывается инфа со счётчика электроэнергии.
В поле DateTime хранится дата и время, в Value значения мгновенной мощности в кВт.
Нужно проинтегрировать данные таблицы за сутки по времени, т.е. подсчитать потреблённую мощность в кВт*час за сутки.
Можно ли это сделать как нибуть ОДНИМ SQL запросом, который сразу бы возвращал значение интеграла или придётся делать выборку всего архива за сутки и по циклу его интегрировать в делающей запрос программе. Проблема второго варианта в необходимости получения большого объёма данных при выборке архива за сутки.
Интегрирование простейшее, методом прямоугольников.
БД Oracle, создать хранимую процедуру на сервере нет возможности.