我有一个表po010,其中的列是polref、POLCRCDTE、PUPDTE。
我必须从表po010中获取polref,其中,POLCRCDTE和PUPDTE之间的月差是最近14个月。
我的尝试是。
SELECT polref,POLCRCDTE,PUPDTE FROM po010,
GROUP BY polref
HAVING months_between(pck_utility.f_dtcnv(POLCRCDTE),pck_utility.f_dtcnv(PUPDTE))>14
注意:POLCRCDTE和PUPDTE是数字格式,pck_utility.f_dtcnv以数字格式作为输入,以date格式返回日期。
第二次尝试是
DECLARE
sysdte DATE;
req_dt DATE;
BEGIN
SELECT system_dt INTO sysdte FROM cs340;
SELECT add_months(sysdte, -14) INTO req_dt FROM po010;
dbms_output.put_line(req_dt);
select * from po010 where pupdte <= pck_utility.f_dtcnv((add_months (sysdte ,-14)));
结束;
注意:这里取cs340中的system_dt,因为在其他场景中,我必须比较这两者之间的日期。
请帮帮我。
两个代码都有错误。第一个错误是ORA 00900第二个是给ORA 06550.
基本上,我需要这个结果集在一个游标中,我需要在一个过程中使用它。
HAVING
用于根据聚合筛选结果,months_between()
不是聚合函数。
也许您只是想使用WHERE
:
SELECT DISTINCT polref,POLCRCDTE,PUPDTE
FROM po010
WHERE months_between(pck_utility.f_dtcnv(POLCRCDTE)
,pck_utility.f_dtcnv(PUPDTE)
)>14
您通常需要SELECT
列表中的每个非聚合字段GROUP BY
,我不确定您对GROUP BY
子句的要求是什么,所以我删除了它,并在SELECT
列表中使用了DISTINCT
。
感谢您的支持,b现在已经解决了。
我可以这样使用。
SELECT DISTINCT p.polref,
p.polcrcdte,
c.system_dt
FROM ddl00.po010 p,
ddl00.cs340 c
WHERE Months_between(pck_utility.F_dtcnv(polcrcdte), system_dt) >= 14