在PL/SQL中如何查询表最后一条记录并在游标中使用其bill_date字段
解决方案
你可以采用以下两种写法实现需求,此前rownum不生效大概率是未嵌套子查询先排序再取行,max方法不生效大概率是语法拼接错误:
方案1:直接取最大账单日期(最简洁)
直接通过MAX()聚合函数获取bill_acct_billcycle表的最大bill_date值,对应游标修正代码如下:
CURSOR c1 IS SELECT DISTINCT intl_prod_id FROM apld_bill_rt abr, acct_bill ab, bill_acct_billcycle bab WHERE abr.CHRG_TP = 'INSTALLMENT' AND abr.TAX_CATG_ID = 'NOTAX' AND abr.acct_bill_id = ab.acct_bill_id AND ab.bill_date = bab.bill_date AND bab.bill_date = (SELECT MAX(bill_date) FROM bill_acct_billcycle);
方案2:按排序规则取最后一条记录的日期
如果你的“最后一条记录”不是按bill_date倒序取,而是按主键、创建时间等其他字段排序,可以用嵌套子查询+rownum的正确写法:
CURSOR c1 IS SELECT DISTINCT intl_prod_id FROM apld_bill_rt abr, acct_bill ab, bill_acct_billcycle bab WHERE abr.CHRG_TP = 'INSTALLMENT' AND abr.TAX_CATG_ID = 'NOTAX' AND abr.acct_bill_id = ab.acct_bill_id AND ab.bill_date = bab.bill_date AND bab.bill_date = ( SELECT bill_date FROM ( SELECT bill_date FROM bill_acct_billcycle -- 此处替换为你判断"最后一条"的排序字段,比如主键ID倒序、创建时间倒序等 ORDER BY bill_date DESC ) t WHERE ROWNUM = 1 );
参考截图

内容的提问来源于stack exchange,提问作者vitaminJava
相关产品推荐
相关产品推荐

