получить значение и предыдущее значение в запросе Aspen SQLPLUS? - PullRequest
1 голос
/ 28 апреля 2019

Я пытаюсь получить значение и значение непосредственно перед использованием SQLPLUS в запросе Aspen V8.8.

Я нашел в библиотеке Oracle функцию "LAG", которая показалась мне идеальной.Но я получаю ошибки при использовании этой функции

ниже мой код:

SELECT IP_TREND_VALUE, IP_TREND_TIME, LAG(IP_TREND_VALUE,1,0) OVER (ORDER BY IP_TREND_TIME)  as valeur_prec from IP_DIDef_1 WHERE name='my_value' and IP_TREND_TIME BETWEEN '15-APR-19 00:00:00' and '28-APR-19 00:00:00' ORDER BY IP_TREND_TIME

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

Большое спасибо

regards

1 Ответ

2 голосов
/ 29 апреля 2019

Имейте в виду, что историк данных далек от базы данных SGBD.Даже если он доступен через драйвер ODBC, синтаксис SqlPlus не является стандартным Sql и даже более отличается от Oracle или SqlServer Sql.При этом, я предполагаю (я полагаю, что вы заинтересованы в записанных данных, а не интерполированных), будет:

LOCAL dTs1 TIMESTAMP;
LOCAL dTs2 TIMESTAMP;

dTs1 = (
    SELECT MAX(IP_TREND_TIME)
    FROM "[Tag name]"
    WHERE IP_TREND_TIME BETWEEN '15-APR-19 00:00:00' AND '28-APR-19 00:00:00'
    AND ABS(IP_TREND_VALUE - [value you search]) < [precision you are ok with]
);

--WRITE dTs1;

SET MAX_ROWS = 1;
dTs2 = (
    SELECT IP_TREND_TIME
    FROM "[Tag name]"
    WHERE IP_TREND_TIME >= '15-APR-19 00:00:00' AND IP_TREND_TIME < dTs1
);

--WRITE dts2;

SET MAX_ROWS = 2;
SELECT IP_TREND_TIME, IP_TREND_VALUE
FROM "[Tag name]"
WHERE IP_TREND_TIME IN (dTs1, dTs2)

Example of result

...