【问题标题】:get value and previous value in Aspen SQLPLUS query?在 Aspen SQLPLUS 查询中获取值和以前的值?
【发布时间】:2019-04-28 20:44:09
【问题描述】:

我正在尝试获取一个值以及在 Aspen V8.8 查询中使用 SQLPLUS 之前的值。

我在 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”。 你能告诉我我的错误在哪里,或者我该如何做才能得到不同的东西?

非常感谢

问候

【问题讨论】:

  • 代码是有效的 SQL,看起来不像是 Oracle 错误消息。 (所有 Oracle 错误消息的前面都包含一个类似“ORA-XYZ”的字符串。)我猜这是在引入分析函数之前创建的旧版 Aspen 的问题,并且程序不知道如何解析该语句。

标签: sqlplus lag aspen


【解决方案1】:


请记住,数据历史数据库与 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)

【讨论】:

  • 非常感谢您的回答!老实说,我不知道 sgbd 和 historian sql 之间的这种差异。我只是猜测 Aspen 选择或必须修改 sql...我明天回到办公室时会尝试您的代码再次非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 2017-07-23
  • 2022-10-23
相关资源
最近更新 更多