Отсутствует спецификация окна для этой функции
Теперь получаем следующую ошибку:
ORA-30484: missing window specification for this function
30484. 00000 - "missing window specification for this function"
*Cause: All window functions should be followed by window specification,
like <function>(<argument list>) OVER (<window specification>)
*Action:
Error at Line: 17 Column: 72
Обновленный код (согласно предложению Аарона Холла)
select meter_id,
to_char(interval_time_local,'dd-mon-yyyy hh24:mi') as gap_start,
to_char(next_interval_time_local,'dd-mon-yyyy hh24:mi') as gap_finish
from (
select i1.device_id as meter_id
,interval_time_local
,SUM(CASE i1.chan_num WHEN 0 THEN i1.chan_value * 2 ELSE 0 END) as chan0
,SUM(CASE i1.chan_num WHEN 2 THEN i1.chan_value * 2 ELSE 0 END) as chan1
,SUM(CASE i1.chan_num WHEN 1 THEN i1.chan_value * 2 ELSE 0 END) as chan2
,SUM(CASE i1.chan_num WHEN 3 THEN i1.chan_value * 2 ELSE 0 END) as chan3
,lead(interval_time_local,1) over (order by device_id, interval_time_local) as next_interval_time_local
from gn_owner_demo.ami_read_interval i1
where created_utc = ( select max(created_utc)
from gn_owner_demo.ami_read_interval i2
where i2.device_id = i1.device_id
and i2.interval_time_local = i1.interval_time_local)
group by device_id, interval_time_local, i1.device_id, lead(interval_time_local,1)
order by device_id, interval_time_local
)
where interval_time_local <> next_interval_time_local - 30/1440;
Я унаследовал некоторый код, который извлекает пробелы в данных. Я никогда не использовал предложение OVER, поэтому не уверен, что оно используется правильно. Сообщение об ошибке:
ORA-00923: FROM keyword not found where expected
00923. 00000 - "FROM keyword not found where expected"
*Cause:
*Action:
Error at Line: 11 Column: 134
Вот запрос - я работаю в SQL-разработчике:
select meter_id
,to_char(gn_owner_demo.interval_time_local,'dd-mon-yyyy hh24:mi') as gap_start
,to_char(gn_owner_demo.next_interval_time_local,'dd-mon-yyyy hh24:mi') as gap_finish
from (
select i1.device_id as meter_id
,interval_time_local
,SUM(CASE i1.chan_num WHEN 0 THEN i1.chan_value * 2 ELSE 0 END) as chan0
,SUM(CASE i1.chan_num WHEN 2 THEN i1.chan_value * 2 ELSE 0 END) as chan1
,SUM(CASE i1.chan_num WHEN 1 THEN i1.chan_value * 2 ELSE 0 END) as chan2
,SUM(CASE i1.chan_num WHEN 3 THEN i1.chan_value * 2 ELSE 0 END) as chan3
,lead(gn_owner_demo.interval_time_local,1) over (order by gn_owner_demo.device_id, gn_owner_demo.interval_time_local) gn_owner_demo.next_interval_time_local
from gn_owner_demo.ami_read_interval i1
where gn_owner_demo.created_utc = ( select max(gn_owner_demo.created_utc)
from gn_owner_demo.ami_read_interval i2
where i2.device_id = i1.device_id
and i2.interval_time_local = i1.interval_time_local)
group by gn_owner_demo.device_id, gn_owner_demo.interval_time_local
order by gn_owner_demo.device_id, gn_owner_demo.interval_time_local
)
where gn_owner_demo.interval_time_local <> gn_owner_demo.next_interval_time_local - 30/1440;
1 ответ
Что такое gn_owner_demo.interval_time_local
?
Ваш from
пункт ссылается на gn_owner_demo.ami_read_interval
поэтому я предполагаю, что gn_owner_demo
это имя схемы и ami_read_interval
это имя таблицы. Если это правильно, то это означает, что gn_owner_demo.interval_time_local
имеет в виду отдельную таблицу, interval_time_local
также принадлежит gn_owner_demo
, Если это на самом деле отдельная таблица, вам нужно присоединиться к этой таблице. Я думаю, что вы действительно хотите сослаться на interval_time_local
столбец в gn_owner_demo.interval_time_local
таблица, и это относится к другим столбцам, на которые вы ссылаетесь таким образом, в этом случае вы будете использовать il
псевдоним, т.е.
lead( il.interval_time_local, 1 )
over( order by il.device_id,
il.interval_time_local) as next_interval_time_local
Теперь я подозреваю, что вы действительно хотите partition by
il.device_id
вместо того, чтобы иметь его в order by
но так как вы не сказали нам, как выглядят ваши данные или каковы ваши желаемые результаты, это всего лишь предположение с моей стороны.
Если мое предположение верно, вам также нужно изменить WHERE
, GROUP BY
, а также ORDER BY
предложения аналогичным образом, так что вы ссылаетесь на имена столбцов из запрашиваемой таблицы, а не псевдонимов таблицы.