我正在使用Oracle数据库,并且使用联接编写了一个SQL查询,如下所示:
SELECT
(CT.CRDATTIM || CT.RECORDCD || CT.CRNODE) AS CALLERKEY
FROM
W67U999S F
JOIN
W03U999S CT
ON F.CCRDATTIM = CT.CRDATTIM
AND F.CRECORDCD = CT.RECORDCD
AND F.CCRNODE = CT.CRNODE
AND F.CRECORDCD = 'T'
AND CT.WRKTYPE = 'CALLER'
JOIN
PQCUSTSRV CDT
ON F.CCRDATTIM = CDT.CRDATTIM
AND F.CRECORDCD = CDT.RECORDCD
AND F.CCRNODE = CDT.CRNODE
WHERE
F.PCRDATTIM = '2019-01-29-06.10.33.037940'
AND F.PRECORDCD = 'F'
AND F.PCRNODE = '01'
AND CT.CRDATTIM < '9999-12-31-23.59.59.999999'
以上查询返回了以下几行数据:
CALLERKEY
----------
2019-01-29-06.10.33.310940T01
2019-03-26-00.51.05.124040T01
2019-03-26-00.51.07.993040T01
2019-03-26-00.51.35.531040T01
2019-04-02-04.02.42.280040T01
现在,我想使用以下SQL查询来查询每一行,以获取我感兴趣的一些其他数据: 示例如下:
SELECT COUNT(*) AS TESTCOUNT FROM PQCUSTSRV where CALLERKEY='2019-01-29-06.10.33.310940T01' AND TO_TIMESTAMP(CRDATTIM,'YYYY-MM-DD HH24.MI.SS.FF')
BETWEEN ADD_MONTHS(SYSTIMESTAMP,-12) AND SYSTIMESTAMP
上面的查询返回以下数据:
TESTCOUNT
------------
2
现在,我想结合以上两个查询,并获得如下所示的输出:
CALLERKEY TESTCOUNT
---------- --------
2019-01-29-06.10.33.310940T01 2
2019-03-26-00.51.05.124040T01 3
2019-03-26-00.51.07.993040T01 2
2019-03-26-00.51.35.531040T01 1
2019-04-02-04.02.42.280040T01 4
我该如何实现?请让我知道是否需要其他信息。
答案 0 :(得分:1)
with t as (
<first query here>
)
select t.callerkey, count(p.callerkey) AS TESTCOUNT
from t left join
PQCUSTSRV p
on p.callerkey = t.callerkey and
to_timestamp(p.CRDATTIM, 'YYYY-MM-DD HH24.MI.SS.FF') >= add_months(SYSTIMESTAMP, -12)
group by t.callerkey;
我将日期比较的逻辑更改为仅使用>=
,假设您在crdattim
中没有将来的值。
答案 1 :(得分:1)
您可以按以下方式使用group by
:
Select F.CALLERKEY, COUNT(1) AS CNT
From (your_first_query) f
Left Join PQCUSTSRV s
On s.CALLERKEY=f.CALLERKEY AND TO_TIMESTAMP(CRDATTIM,'YYYY-MM-DD HH24.MI.SS.FF')
BETWEEN ADD_MONTHS(SYSTIMESTAMP,-12) AND SYSTIMESTAMP
Group by f.callerkey
答案 2 :(得分:0)
未经测试,但这应该可以工作
SELECT A.CALLERKEY, COUNT(*) AS TESTCOUNT
(SELECT (CT.CRDATTIM || CT.RECORDCD || CT.CRNODE) AS CALLERKEY
FROM W67U999S F
JOIN W03U999S CT
ON F.CCRDATTIM = CT.CRDATTIM
AND F.CRECORDCD = CT.RECORDCD
AND F.CCRNODE = CT.CRNODE
AND F.CRECORDCD = 'T'
AND CT.WRKTYPE = 'CALLER'
JOIN PQCUSTSRV CDT
ON F.CCRDATTIM = CDT.CRDATTIM
AND F.CRECORDCD = CDT.RECORDCD
AND F.CCRNODE = CDT.CRNODE
WHERE F.PCRDATTIM = '2019-01-29-06.10.33.037940'
AND F.PRECORDCD = 'F'
AND F.PCRNODE = '01'
AND CT.CRDATTIM < '9999-12-31-23.59.59.999999')A, PQCUSTSRV B
WHERE A.CALLERKEY=B.CALLERKEY AND TO_TIMESTAMP(CRDATTIM,'YYYY-MM-DD HH24.MI.SS.FF')
BETWEEN ADD_MONTHS(SYSTIMESTAMP,-12) AND SYSTIMESTAMP
GROUP BY B.CALLERKEY