简体   繁体   English

合并两个Oracle查询

[英]Combine Two Oracle Queries

I am a beginner to oracle/sql. 我是oracle / sql的初学者。 I can write basic queries but now I am getting in over my head. 我可以编写基本查询,但是现在我已经不知所措了。 I have two queries that I would like to combine. 我有两个查询要合并。 The output I am looking for is like so (in one row): 我正在寻找的输出是这样的(一行):

Batch # 批次编号
Status 状态
Minutes 分钟
Page Count 页数

Here are the two separate queries: 这是两个单独的查询:

   SELECT aq.batchnum, aq.status, (dateended - datestarted) * 24 * 60 minutes
    FROM archivedqueue aq INNER JOIN scanninglog sl ON aq.batchnum = sl.batchnum
   WHERE     aq.datestarted BETWEEN TO_DATE ('27-MAY-2014 00:00:00', 'dd-mon-yyyy hh24:mi:ss')
                                AND TO_DATE ('29-MAY-2014 23:59:59', 'dd-mon-yyyy hh24:mi:ss')
         AND sl.usernum = '3724'
         AND sl.actionnum = '200'
ORDER BY aq.batchnum DESC;


SELECT COUNT (*)
  FROM archivedqueue aq
       INNER JOIN itemdata id ON aq.batchnum = id.batchnum
       INNER JOIN itemdatapage idp ON idp.itemnum = id.itemnum
       INNER JOIN scanninglog sl ON aq.batchnum = sl.batchnum
 WHERE aq.batchnum = '648353' AND sl.actionnum = '202';

I was trying to do something like this, but I am unsure of how to link the batchnum from the result in q1 to the query in q2 我正在尝试做这样的事情,但是我不确定如何将Batchnum从第1季度的结果链接到第2季度的查询

    SELECT q1.batchnum,
       q1.status,
       q1.minutes,
       q2.page_count
  FROM (  SELECT aq.batchnum, aq.status, (dateended - datestarted) * 24 * 60 minutes
            FROM archivedqueue aq INNER JOIN scanninglog sl ON aq.batchnum = sl.batchnum
           WHERE     aq.datestarted BETWEEN TO_DATE ('27-MAY-2014 00:00:00',
                                                     'dd-mon-yyyy hh24:mi:ss')
                                        AND TO_DATE ('29-MAY-2014 23:59:59',
                                                     'dd-mon-yyyy hh24:mi:ss')
                 AND sl.usernum = '3724'
                 AND sl.actionnum = '200'
        ORDER BY aq.batchnum DESC) q1,
       (SELECT COUNT (*) page_count
          FROM archivedqueue aq
               INNER JOIN itemdata id ON aq.batchnum = id.batchnum
               INNER JOIN itemdatapage idp ON idp.itemnum = id.itemnum
               INNER JOIN scanninglog sl ON aq.batchnum = sl.batchnum
         WHERE sl.actionnum = '202' AND aq.batchnum = q1.batchnum) q2

Give you the non ANSI SQL version, given you're running in an Oracle DB (which I prefer :) ): 给您非ANSI SQL版本,前提是您正在Oracle DB中运行(我更喜欢:)):

  SELECT aq.batchnum,
         aq.status,
         (dateended - datestarted) * 24 * 60 minutes,
         COUNT (*) page_count
    FROM archivedqueue aq,
         itemdata id,
         itemdatapage idp,
         (SELECT *
            FROM scanninglog
           WHERE usernum = '3724' AND actionnum IN ('200', '202')) sl
   WHERE     aq.batchnum = id.batchnum
         AND idp.itemnum = id.itemnum
         AND aq.batchnum = sl.batchnum
         AND aq.batchnum = '648353'
         AND aq.datestarted BETWEEN TO_DATE ('27-MAY-2014 00:00:00', 'dd-mon-yyyy hh24:mi:ss')
                                AND TO_DATE ('29-MAY-2014 23:59:59', 'dd-mon-yyyy hh24:mi:ss')
GROUP BY aq.batchnum, aq.status, (dateended - datestarted) * 24 * 60
ORDER BY aq.batchnum DESC;

I think you want to make use of the GROUP BY function. 我认为您想利用GROUP BY函数。 It's hard to be sure without knowing your table structures and so on, but it might look something like this: 在不知道表结构等情况下很难确定,但是看起来可能像这样:

SELECT aq.batchnum, aq.status, (dateended - datestarted)*24*60 Minutes, count(*)
FROM archivedqueue aq
     INNER JOIN scanninglog sl
     ON aq.batchnum = sl.batchnum
     INNER JOIN itemdata id
     ON aq.batchnum = id.batchnum
     INNER JOIN itemdatapage idp
     ON idp.itemnum = id.itemnum
WHERE (
      aq.datestarted 
      BETWEEN TO_DATE( '27-MAY-2014 00:00:00', 'dd-mon-yyyy hh24:mi:ss' ) 
      AND TO_DATE( '29-MAY-2014 23:59:59', 'dd-mon-yyyy hh24:mi:ss' )
      )
AND sl.usernum = '3724'
AND sl.actionnum = '200'
GROUP BY aq.batchnum, aq.status, (dateended - datestarted)*24*60
ORDER BY aq.batchnum DESC

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM