【问题标题】:Oracle query for get total issue card number which was canceled beforeOracle查询获取之前取消的总发行卡号
【发布时间】:2019-12-01 07:01:49
【问题描述】:

我想显示之前代理取消卡的代理卡号补发总数。我有三种类型的卡状态 READY、CANCEL、BLOCK。所以我只需要准备好状态卡作为补发。我如何才能获得在 2019 年 11 月 23 日至 2019 年 11 月 25 日之前取消并重新发行的卡的代理商。以下是我的查询以取消所有卡

你能帮我解决这个问题吗?

【问题讨论】:

  • 取消和补发卡都应该在指定日​​期之间?
  • @Tejash yes 应该在日期之间

标签: sql oracle


【解决方案1】:

看来你需要LEAD()ROW_NUMBER() 分析函数:

SELECT agent_id,cardnumber,cardtype,dateofissue,cardstatus
  FROM
  (
   SELECT cu.agent_id,cu.cardnumber,cu.cardtype,cu.dateofissue,cu.cardstatus,
          LEAD(cu.cardstatus,1) OVER (PARTITION BY cu.cardnumber ORDER BY cu.dateofissue DESC) as pre_cardstatus,
          ROW_NUMBER() OVER (PARTITION BY cu.cardnumber ORDER BY cu.dateofissue DESC) as rn
     FROM eofficeuat.cardprintlog_user cu
     JOIN eofficeuat.cnf_agents ca ON cu.agent_id = ca.agent_id
     JOIN eofficeuat.agent_types at ON ca.agent_type_id = at.agent_type_id
    WHERE at.agent_type_id='12'       
      AND dateofissue BETWEEN date'2019-11-23' AND date'2019-11-25'
   )
  WHERE pre_cardstatus = 'CANCEL' 
    AND cardstatus='READY' 
    AND rn = 1

【讨论】:

  • 显示错误“表或视图不存在”。你能像这样更新它的表名 eofficeuat.cardprintlog_user.table_name 吗?
  • 嗯,schema名称和你自己的数据库结构有关,我只是为了简单去掉,你可以自己添加。如果你愿意,我会添加@mdkamrul
  • 现在收到此错误 ORA-00918:列定义不明确 00918。00000 -“列定义不明确”*原因:*操作:第 4 行错误:11 列
  • 添加别名cu 用于返回子查询@mdkamrul 中的列
  • 好的,我已经运行它不是零行重新调整,我想取消并重新发行总卡
猜你喜欢
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2021-01-08
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多