Oracle with group by和count查询问题

时间:2015-01-22 08:17:31

标签: mysql sql oracle oracle11g

我有两个表来访问数据。

1- bulk_prov_master
2- bulk_prov_detail

问题是,我想在Request_stamp和Response_stamp处获取请求的用户数。

users是bulk_prov_detail中的一列,每个请求都有多个用户。

现在我已经编写了一个查询来获取所有请求的请求和响应时间。 (请求可以相同)

查询

select A.request_batch_id, A.request_stamp, A.response_stamp--, count (DISTINCT b.users)
from bpdata.bulk_prov_master A, bpdata.bulk_prov_detail b
where A.request_stamp > to_DATE('01/09/2015 23', 'MM/DD/YYYY HH24') and A.response_stamp< to_DATE('01/11/2015 00', 'MM/DD/YYYY HH24') and A.request_batch_id = b.request_batch_id

我得到了以下回复。

265384  1/10/2015   1/10/2015 5:05:23 AM
265384  1/10/2015   1/10/2015 5:05:23 AM
265384  1/10/2015   1/10/2015 5:05:23 AM
265384  1/10/2015   1/10/2015 5:05:23 AM
265384  1/10/2015   1/10/2015 5:05:23 AM

现在我想要每个时间戳的用户数。

更新 我已经写了另一个查询,这次我得到了以下回复

查询

SELECT To_CHAR( B.response_stamp , 'DD/MM/YYYY HH24') as input, count(A.REQUEST_BATCH_ID), count(DISTINCT A.users)
FROM bpdata.bulk_prov_detail A, bpdata.bulk_prov_master B
where B.response_stamp > to_DATE('01/21/2015 00', 'MM/DD/YYYY HH24') and B.response_stamp< to_DATE('01/22/2015 00', 'MM/DD/YYYY HH24') and A.REQUEST_BATCH_ID = B.REQUEST_BATCH_ID
GROUP BY To_CHAR(B.response_stamp, 'DD/MM/YYYY HH24');

响应

21/01/2015 03   12865   3016
21/01/2015 08   5706    573
21/01/2015 05   1812    182
21/01/2015 04   422     43
21/01/2015 00   8048    2053

现在我收到response_stamp的这个数据,我想要request_time数据中用户相同的response_time数据

以下是我想要的示例数据

request_stamp   requests  users   response_stamp   requests  users
21/01/2015 03   12865     3016    21/01/2015 05    12865      3016
21/01/2015 08   5706      573     21/01/2015 03    12865      3016
21/01/2015 05   1812      182     21/01/2015 05    12865      3016
21/01/2015 04   422       43      21/01/2015 05    12865      3016
21/01/2015 00   8048      2053    21/01/2015 05    12865      3016

1 个答案:

答案 0 :(得分:0)

好的最好方法是使用像

这样的小组
select count(*) as requests, A.request_stamp from bpdata.bulk_prov_master A, bpdata.bulk_prov_detail b where A.request_stamp > to_DATE('01/09/2015 23', 'MM/DD/YYYY HH24') and A.response_stamp< to_DATE('01/11/2015 00', 'MM/DD/YYYY HH24') and A.request_batch_id = b.request_batch_id group by A.request_stamp.

如果要计算不同的用户,则必须使用子选择:

select count(*) as requests, stamp, user from (select A.request_batch_id, A.request_stamp as stamp, A.response_stamp-- (DISTINCT b.users) user from bpdata.bulk_prov_master A, bpdata.bulk_prov_detail b where A.request_stamp > to_DATE('01/09/2015 23', 'MM/DD/YYYY HH24') and A.response_stamp< to_DATE('01/11/2015 00', 'MM/DD/YYYY HH24') and A.request_batch_id = b.request_batch_id)