oracle分析函数lag/lead不能计算日期型数据?

来源:互联网 发布:网络监控vlan划分 编辑:程序博客网 时间:2024/05/16 08:12

一个表中包含日期型字段,使用lag或lead函数时,若lag/lead的第一个参数为日期型字段,会报错“ORA-00932:不一致的数据类型:要求DATE 得到的却是 NUMBER”。百思不得其解,将日期型字段用to_char换成字符串后,再调用没有问题(若要得到日期再用to_date转化,代码上稍微麻烦一点)

测试用例:
SELECT seq
       ,t.mydate
       --,lag(t.mydate, 1, 0) over (ORDER BY mydate)
       --,lead(t.mydate, 1, 0) over (ORDER BY t.seq) -- 报错ORA-00932
       ,lead(to_char(t.mydate, 'yyyy-mm-dd')) over (ORDER BY t.mydate ASC) -- 执行正确
FROM
(
    SELECT ROWNUM seq, (to_date('1900-01-01', 'yyyy-mm-dd') + ROWNUM) mydate -- 开始日期加上N天
    FROM ALL_OBJECTS
    WHERE 1 = 1
    AND ROWNUM < 1000
) t