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.