简体   繁体   中英

Combine Two Oracle Queries

I am a beginner to 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

    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 :) ):

  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. 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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