[英]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.