【问题标题】:Selecting last record in plsql选择plsql中的最后一条记录
【发布时间】:2021-11-26 12:45:16
【问题描述】:

您好,我需要选择表中的最后一条记录(bill_account_billcycle)。找到它后,我需要从最后一条记录中获取 bill_date 列日期,并需要在我的游标查询中实现。 我阅读了 rownum max 等,但无法成功实施。我愿意接受建议。我将在那里添加一个 bill_account 记录的屏幕截图和我的脚本。从现在开始谢谢你。

    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 IN (select );-- I should do something here.

【问题讨论】:

  • 没有 ORDER BY 就没有“最后一个”(或“第一个”)的概念。
  • @EdStevens 那么世界公民如何处理这个问题?
  • “那么世界公民如何处理这个问题” 好吧,我不知道公民身份与它有什么关系,但开发人员会处理通过提供适当的ORDER BY clause.
  • @EdStevens Hallelujah

标签: sql oracle plsql


【解决方案1】:

从 Oracle 12 开始,您可以使用ORDER BY,然后使用FETCH FIRST

CURSOR c1 IS
  SELECT DISTINCT
         intl_prod_id
  FROM   apld_bill_rt abr
         INNER JOIN acct_bill ab
         ON (abr.acct_bill_id = ab.acct_bill_id)
         INNER JOIN bill_acct_billcycle bab
         ON (ab.bill_date = bab.bill_date)
  WHERE  abr.CHRG_TP = 'INSTALLMENT'
  ORDER BY bab.bill_date DESC
  FETCH FIRST ROW ONLY;

如果您想要多行包含最新日期,请使用FETCH FIRST ROW WITH TIES

【讨论】:

    【解决方案2】:

    对我来说,它看起来像

    CURSOR c1 IS
    SELECT DISTINCT intl_prod_id
      FROM apld_bill_rt abr
           JOIN acct_bill ab ON abr.acct_bill_id = ab.acct_bill_id
     WHERE     ab.bill_date = (SELECT MAX (bab.bill_date)
                                 FROM bill_account_billcycle bab)
           --
           AND abr.chrg_tp = 'INSTALLMENT'
           AND abr.tax_catg_id = 'NOTAX'
    

    即从游标的FROM 子句中删除bill_account_billcycle 表;使用子查询选择最后日期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多