Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 尝试获取并发(oracle 11g)的最新执行_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql 尝试获取并发(oracle 11g)的最新执行

Sql 尝试获取并发(oracle 11g)的最新执行,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我试图获取特定并发事件的最新执行情况;我正在连接到Oracle 11g数据库 我的查询工作正常,但由于某些原因,我无法仅获取最新的执行,我指的是请求\u id 这是我的问题: 问题是我得到了几行,我只想要最新的一行,请求id最高 您能帮助我吗?您可以使用行号分析功能和降序请求id假设请求id是主键列作为标识,行之间不会出现重复列值: select program, "request id", "start", "end", "request id", time_mm, status, "user

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

我的查询工作正常,但由于某些原因,我无法仅获取最新的执行,我指的是请求\u id

这是我的问题:

问题是我得到了几行,我只想要最新的一行,请求id最高

您能帮助我吗?

您可以使用行号分析功能和降序请求id假设请求id是主键列作为标识,行之间不会出现重复列值:

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 
如果您想为每个用户\u并发\u程序\u名称分别添加一行,请添加partition by子句,如下所示:

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

您好,非常感谢您的回复!。我要检查一下:伙计,它正在工作,但如果我想添加另一行以获得2个或更多concurrents的最新执行,它会显示零行,我的意思是:nam.user\u concurrent\u program\u name像“报告并发销售”和nam.user\u concurrent\u program\u name像“报告并发客户”和nam.user\u concurrent\u program\u name像“报告并发星期日”你明白了吗?@Student\u new通过添加新的当前条件,去掉rn=1,你得到了什么。。?顺便说一句,我想您需要一个OR运算符,而不是类似语句之间的AND,同时不要忘记将它们放在括号内,或者您可以在“report concurrent sales”和“report concurrent customers”中累积as和nam.user\u concurrent\u program\u name,“report concurrent sunday”。如果使用新条件删除语句rn=1,则得到零行。如果我将条件rn=1 using和nam.user\u concurrent\u program\u name放在“report concurrent sales”、“report concurrent customers”和“report concurrent sunday”中,我只得到了一行:/OK,我现在得到了,你想把它们分开@Student\u new。签出最后一次编辑。
 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') )
row_number() 
over (partition by nam.user_concurrent_program_name order by con.request_id desc) as rn