我正在尝试在Oracle 8i中运行此查询,但它无效!
SELECT DECODE(seqnum, 1, t.ID1,cnt,'0') PI_VALUE1,
DECODE(seqnum, 1, t.STARTTIME,cnt,t.ENDTIME) timestamp,
'090.'
|| t2.APP
|| '.BATCH' tagname
FROM
(SELECT t.*,
row_number() over(partition BY t.ID1, t.PLANT_UNIT order by t.STARTTIME) AS seqnum,
COUNT(*) over(partition BY t.ID1, t.PLANT_UNIT) cnt
FROM tb_steps t
) t
INNER JOIN tb_equipments t2
ON t2.plant_unit = t.plant_unit
WHERE (seqnum = 1
OR SEQNUM = CNT)
AND (T.STARTTIME > '15-jul-2013'
AND t.ENDTIME < '15-aug-2013') ;
我已经进行了很多更改[比如case when
更改了decode
但是它仍然不行......
有人可以帮我编写Oracle 8i支持的查询吗?
PS:我知道Oracle for AGES不支持这个版本,但我只是查询我的.NET应用程序的数据,所以我无法升级/触摸数据库。版本是8.1.7,具体错误:
ORA-00933: SQL command not properly ended.
非常感谢,
答案 0 :(得分:3)
直到Oracle Database 9iR1(9.0.1)才引入ANSI连接。 8.1.7不支持它们。
尝试重新编写没有ANSI样式连接的查询。
这样的事情可能有用:
SELECT DECODE(seqnum, 1, t.ID1,cnt,'0') PI_VALUE1,
DECODE(seqnum, 1, t.STARTTIME,cnt,t.ENDTIME) timestamp,
'090.'
|| t2.APP
|| '.BATCH' tagname
FROM
(SELECT t.*,
row_number() over(partition BY t.ID1, t.PLANT_UNIT order by t.STARTTIME) AS seqnum,
COUNT(*) over(partition BY t.ID1, t.PLANT_UNIT) cnt
FROM tb_steps t
) t, tb_equipments t2
WHERE t2.plant_unit = t.plant_unit
AND (t.seqnum = 1
or t.seqnum = t.cnt)
AND (T.STARTTIME > '15-jul-2013'
AND t.ENDTIME < '15-aug-2013') ;
完全未经测试....
希望有所帮助。