Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
如何在不使用UNION的情况下对超过2条SQL语句进行单个SQL查询?_Sql_Oracle - Fatal编程技术网

如何在不使用UNION的情况下对超过2条SQL语句进行单个SQL查询?

如何在不使用UNION的情况下对超过2条SQL语句进行单个SQL查询?,sql,oracle,Sql,Oracle,在这种情况下,您可以使用FIRST或LAST查找最新日期的最小日期时间: SELECT 'INITIALIZE' AS PROCESS_DESC, floor((MAX(EXEC_DATE)-MIN(EXEC_DATE))*24) || ' HOURS ' || mod(floor((MAX(EXEC_DATE)-MIN(EXEC_DATE))*24*60),60) || ' MINUTES ' || mod(floor((MAX(EXEC_DATE)-MIN(EXEC_DA

在这种情况下,您可以使用FIRST或LAST查找最新日期的最小日期时间:

SELECT 'INITIALIZE' AS PROCESS_DESC,
  floor((MAX(EXEC_DATE)-MIN(EXEC_DATE))*24)
  || ' HOURS '
  || mod(floor((MAX(EXEC_DATE)-MIN(EXEC_DATE))*24*60),60)
  || ' MINUTES '
  || mod(floor((MAX(EXEC_DATE)-MIN(EXEC_DATE))*24*60*60),60)
  || ' SECS ' time_difference
FROM spool_table
WHERE process_desc                         ='INITIALIZE'
AND to_date(EXEC_DATE, 'DD-MON-YYYY')      =
  (SELECT to_date(EXEC_DATE, 'DD-MON-YYYY')=
  FROM spool_table
  WHERE process_desc='INITIALIZE'
  )
UNION ALL
SELECT 'PRELIM' AS PROCESS_DESC,
  floor((MAX(EXEC_DATE)-MIN(EXEC_DATE))*24)
  || ' HOURS '
  || mod(floor((MAX(EXEC_DATE)-MIN(EXEC_DATE))*24*60),60)
  || ' MINUTES '
  || mod(floor((MAX(EXEC_DATE)-MIN(EXEC_DATE))*24*60*60),60)
  || ' SECS ' time_difference
FROM spool_table
WHERE process_desc                   ='PRELIM'
AND to_date(EXEC_DATE, 'DD-MON-YYYY')=
  (SELECT to_date(MAX(EXEC_DATE), 'DD-MON-YYYY')
  FROM spool_table
  WHERE process_desc='PRELIM'
  )
CTE是为了澄清这个问题。如果需要,甚至不需要这样的子查询,可以将其作为子查询:

with cte (process_desc, max_exec_date, min_exec_date) as (
    select 
        process_desc,
        max(exec_date) max_exec_date,
        min(exec_date) keep (dense_rank last order by trunc(exec_date) nulls first) min_exec_date
    from spool_table s
    where process_desc in ('PRELIM', 'INITIALIZE') -- include or exclude what process you want here
    group by process_desc
)
select
    process_desc,
    floor((max_exec_date-min_exec_date)*24) || ' HOURS ' ||
    mod(floor((max_exec_date-min_exec_date)*24*60),60)  || ' MINUTES ' ||
    mod(floor((max_exec_date-min_exec_date)*24*60*60),60) 
    || ' SECS ' time_difference
from cte;
使用相关子查询有点天真:

select
    process_desc,
    floor((max(exec_date)-min(exec_date) keep (dense_rank last order by trunc(exec_date) nulls first))*24) || ' HOURS ' ||
    mod(floor((max(exec_date)-min(exec_date) keep (dense_rank last order by trunc(exec_date) nulls first))*24*60),60)   || ' MINUTES ' ||
    mod(floor((max(exec_date)-min(exec_date) keep (dense_rank last order by trunc(exec_date) nulls first))*24*60*60),60) 
    || ' SECS ' time_difference
from spool_table s
where process_desc in ('PRELIM', 'INITIALIZE')
group by process_desc;

到联合体下半部分的“DD-MON-YYYY”日期MaxExec\u日期。。。这是一个错误吗?选择“PRELIM”作为过程描述。。。你是认真的吗?你能修改查询使其变得简单和面向结果吗?我们如何在“过程描述”列中添加不在“过程描述”列中的WHERE条件?选择“度量”作为过程描述,Floormaxec|DATE-MINEXEC|DATE*24 | | | |小时| modfloormaxec| DATE-MINEXEC|DATE*24 | | | modfloormaxec| DATE DATE*24*60*60,60 | | | | |秒时间|与spool|表的时间差,其中进程不在'INITIALIZE中,'PRELIM'和to|dateEXEC|DATE DATE DATE u,'DD MON MON yyyyyyyyyy'=maxec|,来自spool_表的'DD-MON-YYYY',其中进程描述不在'INITIALIZE'、'PRELIM'中;这个问题毫无意义。请解释您需要实现哪些业务逻辑;如果您从SPOOL_表和所需输出中提供一些示例数据,这将有助于我们如何在上面的sql查询中添加进程描述不在'initialize','prelim'中的位置?@nawaraj-我刚刚在'prelim','initialize'中添加了进程描述。你可以在那里替换它。为什么现在要在'PRELIM','INITIALIZE'中添加进程描述??您的具体目标是什么?我必须在同一个sql语句中选择process_desc not in'INITILIZE','PRELIM'以及上面的查询,该语句返回具有时差的不同process_desc行中的值。可能吗?你的帮助会很感激的,GurV?那就不要把where子句放在这里。您将在单独的行中获取所有流程选择“CERIFIED-MEASURE”作为流程描述,FloorMarmaxec|u DATE-MINEXEC|u DATE*24 | | | |小时| ModFloorMarmaxec| u DATE-MINEXEC|u DATE*24 | |小时| ModFloormaxec| u DATE-MINEXEC| 24*60,60 | | | | | |分钟| | ModFloorMarmaxec| u DATE-MINEXEC| MINEXEC| MINEXEC| mines*24*60*60*60*60*60,60 | |“INITIALIZE”、“PRELIM”和to_dateEXEC_DATE,“DD-MON-YYYY”=从假脱机中选择to_dateMAXEXEC_DATE,“DD-MON-YYYY”表进程\u desc不在“INITIALIZE”中、“PRELIM”?不在上述查询中添加?
select process_desc,
  floor((max(exec_date)-min(exec_date))*24)
  || ' HOURS '
  || mod(floor((max(exec_date)-min(exec_date))*24*60),60)
  || ' MINUTES '
  || mod(floor((max(exec_date)-min(exec_date))*24*60*60),60)
  || ' SECS ' time_difference
from spool_table s
where process_desc in ('PRELIM', 'INITIALIZE')
and trunc(exec_date) = (
    select trunc(max(exec_date))
    from spool_table t
    where t.process_desc = s.process_desc
)
group by process_desc;