【问题标题】:Trying to get the latest execution of a concurrent (oracle 11g)尝试获取并发的最新执行(oracle 11g)
【发布时间】:2019-11-24 02:41:47
【问题描述】:

我正在尝试获取特定并发的最新执行;我正在连接到 Oracle 11g 数据库

我的查询工作正常,但由于某种原因我无法仅获得最新的执行,我的意思是 request_id

这是我的查询:

select nam.user_concurrent_program_name program,
       con.request_id "request id",
       to_char(con.actual_start_date, 'dd/mm/yyyy hh24:mi') start,
       to_char(con.actual_completion_date, 'dd/mm/yyyy hh24:mi') end,
       trunc((con.actual_completion_date - con.actual_start_date) * 1440, 2) time_mm,
       con.status_code status,
       us.user_name user,
       con.oracle_process_id,
       con.oracle_session_id,
       con.argument_text
  from fnd_concurrent_programs_tl nam,
       fnd_concurrent_requests    con,
       fnd_user                   us
 where con.concurrent_program_id = nam.concurrent_program_id
   and con.requested_by = us.user_id
   and con.actual_start_date >= to_date('20/11/2019', 'dd/mm/rrrr')
   and con.actual_start_date < to_date('23/11/2019', 'dd/mm/rrrr') + 1
   and nam.user_concurrent_program_name like 'report concurrent sales'
   and co.request_id =
       (select max(con.request_id)
          from fnd_concurrent_requests can
         where con.request_id = can.request_id);

问题是我得到了几行,我只想要最新的行,具有最高的 request_id。

你能帮帮我吗?

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    您可以使用row_number() 降序解析函数request_id(假设request_id 是作为标识的主键列,没有tie行间重复列值) 将发生):

    select program, "request id", "start", "end", "request id", time_mm, status, "user", 
           oracle_process_id, oracle_session_id, argument_text
      from
      (
        select nam.user_concurrent_program_name program,
               con.request_id "request id",
               to_char(con.actual_start_date,'dd/mm/yyyy hh24:mi') "start",
               to_char(con.actual_completion_date,'dd/mm/yyyy hh24:mi') "end",
               trunc((con.actual_completion_date-con.actual_start_date)*1440,2) time_mm,
               con.status_code status,
               us.user_name "user",
               con.oracle_process_id,
               con.oracle_session_id,
               con.argument_text,
               row_number() over (order by con.request_id desc) as rn
          from fnd_concurrent_programs_tl nam
          join fnd_concurrent_requests con
            on con.concurrent_program_id=nam.concurrent_program_id
          join fnd_user us
            on con.requested_by = us.user_id
         where con.actual_start_date >= date'2019-11-20' 
           and con.actual_start_date <  date'2019-11-23' + 1
           and nam.user_concurrent_program_name like  'report concurrent sales'
      )  
    where rn = 1 
    

    附:注意userend等保留关键字用引号括起来。

    编辑新案例您可以将子查询的where条件转换为:

     where con.actual_start_date >= date'2019-11-20' 
       and con.actual_start_date <  date'2019-11-23' + 1
       and ( nam.user_concurrent_program_name in 
                                                ('report concurrent sales',
                                                 'report concurrent customers',
                                                 'report concurrent sunday') )
    

    如果您想为每个user_concurrent_program_name 分别添加一行,请添加partition by 子句

    row_number() 
    over (partition by nam.user_concurrent_program_name order by con.request_id desc) as rn
    

    【讨论】:

    • 您好,非常感谢您的回复!去看看:)
    • 老兄,它正在工作,但如果我想添加另一行以获得 2 个或更多并发的最新执行,它显示零行,我的意思是:和 nam.user_concurrent_program_name 像'report concurrent sales' 和 nam.user_concurrent_program_name 之类的 'report concurrent customers' 和 nam.user_concurrent_program_name 之类的 'report concurrent sunday' 你明白吗?
    • @Student_new 删除where rn = 1 并添加新的当前条件有什么好处......?顺便说一句,我想你需要一个 OR 运算符而不是类似语句之间的 AND,不要忘记将它们放在 括号 内,或者干净利落地累积作为and nam.user_concurrent_program_name in ('report concurrent sales','report concurrent customers','report concurrent sunday')
    • 如果我用我的新条件删除语句 rn = 1 我得到零行。如果我使用 和 nam.user_concurrent_program_name 将条件 rn = 1 放入 ('report concurrent sales','report concurrent customers','report concurrent sunday') 我只有 1 行:/
    • 好的,我现在知道了,你想单独拥有它们@Student_new。检查最后的编辑。
    猜你喜欢
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2017-07-01
    • 2011-06-24
    相关资源
    最近更新 更多