我正在尝试加入下面的2个查询。.尽管下面的两个查询都使用相同的表,但我无法获得正确的结果。
在此查询中,我正在检查满足条件m1的表1中存在的条目.condition为1,并对该表进行查询,其中即使在5分钟后表2中也没有条目,然后获取该条目的计数。
您看到的30分钟的日期检查是获取表中所有在半小时前处理的条目。
SELECT count(*) AS TOTALCOUNT,
SELECT TO_CHAR(amount, '$999,999,999,999,999.99') AS TOTALVALUE
from table1 m1
LEFT JOIN table2 m ON m.id=m1.id
where m1.condition='1'
and amount BETWEEN 1000 and 25000
and (m1.DATE <= (select to_char((select systimestamp - interval '0 00:05' day to minute from dual),'dd-MON-yy HH.MI.SS AM TZD') from dual))
and m1.DATE <= (select to_char((select systimestamp - interval '0 00:30' day to minute from dual),'dd-MON-yy HH.MI.SS AM TZD') from dual)
and m1.DATE <= systimestamp
类似地,在下面的表2中的查询中有一些条件..因此,基于此,我正在执行一些操作。
SELECT COALESCE(SUM (CASE when m.f = 'Converted' then 1 else 0 END),0) AS CCOUNT,
COALESCE(SUM (CASE when m.f = 'Do Not Convert' then 1 else 0 END),0) AS NCOUNT,
count(m. id) AS TOTALCOUNT,
TO_CHAR(COALESCE (SUM(CASE when m.f = 'C' then (amount) END),0), '$999,999,999,999,999.99') AS CONVERTED,
TO_CHAR(COALESCE (SUM(CASE when m.f = 'D' then (amount) END),0), '$999,999,999,999,999.99') AS NONCONVERTED,
TO_CHAR(COALESCE (SUM(CASE when m.f <> '0' then (amount) END),0), '$999,999,999,999,999.99') AS TOTAL
FROM table1 ml
JOIN table2 m ON m.id=ml.id
and amount BETWEEN 1000 and 25000
and m1.DATE <= (select to_char((select systimestamp - interval '0 30:00' day to minute from dual),'dd-MON-yy HH.MI.SS AM TZD') from dual)
and m1.DATE < systimestamp;
我必须结合以上两个查询。.但是我做不到。
答案 0 :(得分:0)
过滤器之间唯一真正的区别是m1.condition = '1'
,所以只需添加
count(case condition when '1' then 1 end) as condition_1_totalcount,
sum(case condition when '1' then amount end) as condition_1_totalvalue
第二个查询。在我的简短测试中,它看起来还可以:
-- sample data
with
table1(id, date_, condition) as (
select 1, date '1990-02-19', '1' from dual union all
select 2, date '1990-02-19', '7' from dual union all
select 3, date '1990-02-19', '1' from dual union all
select 4, date '1990-02-19', '1' from dual ),
table2(id, f, amount) as (
select 1, 'C', 3000 from dual union all
select 2, 'D', 3500 from dual union all
select 3, 'D', 4000 from dual union all
select 4, 'D', 5000 from dual )
-- query
select sum (case when m.f = 'Converted' then 1 else 0 end) ccount,
sum (case when m.f = 'Do Not Convert' then 1 else 0 end) as ncount,
count(m.id) as totalcount,
sum(case when m.f = 'C' then (amount) end) as converted,
sum(case when m.f = 'D' then (amount) end) as nonconverted,
sum(case when m.f <> '0' then (amount) end) as total,
count(case condition when '1' then 1 end) as condition_1_totalcount,
sum(case condition when '1' then amount end) as condition_1_totalvalue
from table1 ml
join table2 m on m.id = ml.id
where ml.date_ <= systimestamp - interval '30' minute
and amount between 1000 and 25000
我不完全理解为什么第一个查询中的5 min
部分。超过30分钟的行也超过5分钟,因此如注释中所指出的那样是多余的。并且比当前时间戳更早。如果您需要通过这种方式来区分值,也可以将此条件放在case when
s中。