我在函数内的以下查询中遇到 SQL错误(-999)尚未实现:
SELECT
RES.resourcename,
RES.resourceloginid,
RES.extension,
ASD.eventdatetime,
ASD.eventtype,
RANK() OVER (PARTITION BY RES.resourcename ORDER BY RES.resourcename,ASD.eventdatetime)
FROM agentstatedetail ASD JOIN resource RES ON ASD.agentid=RES.resourceid
WHERE ASD.eventdatetime BETWEEN to_date('18/04/2015 00:00:00',
"%d/%m/%Y %H:%M:%S")
AND to_date('18/04/2015 23:59:59', "%d/%m/%Y %H:%M:%S")
AND ASD.agentid IN(2620,2622)
AND ASD.eventtype IN(1, 7);
当我用一个整数替换rank语句时,它可以正常工作。此外,当我使用rank函数作为单独的查询(不在函数内)执行查询时,我得到了所需的结果。知道为什么我在函数内部查询时出现此错误? 非常感谢... 注意:我使用Server Studio作为客户端
答案 0 :(得分:0)
转移评论以回答。
您使用的是哪个版本的Informix?
最近在12.10和更高版本的11.70中添加了OLAP功能(例如RANK)。如果您的版本早于此版本,则无法使用,您需要升级。
如果您的版本支持它,那么您应该联系IBM / Informix技术支持,以了解它是否是已知问题和/或在更新的修订包中修复。而且,如果这不是一个已知问题,您的报告可能会帮助他们。
您也应该检查IDS 12.10 Knowledge Center。
来自comment的Bharath确认了'版本过旧'的假设:
如你所述,Informix版本低于11.70。
答案 1 :(得分:0)
我正在回应以供将来的访问者参考,因为在先前的评论和响应中未正确识别出特定问题。
每当子查询在其WHEN
子句中引用外部查询列时,便会在Informix中获得该特定的错误代码。在此特定实例中,ASD.eventdatetime
引用正在触发此错误。与排名无关。
根据情况,您可以使用JOIN
来解决此问题。 ON
子句未显示此限制。
这并不是说,一旦删除了该列引用,在较早的Informix版本中,RANK
不会触发另一个不同的错误。
顺便说一句,我碰巧经常与Cisco通过CUCCX授予我们的可怕数据库打交道。使用to_date
会降低性能。