【发布时间】:2020-02-06 06:08:58
【问题描述】:
我正在尝试加入以下 2 个查询。虽然以下两个查询都使用相同的表,但我无法获得正确的结果。。
在此查询中,我正在检查表 1 中是否存在满足条件 m1.condition 为 1 的条目,并且对于该条目,对表 2 进行查询,即使 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;
我必须结合上述两个查询..但我做不到。
【问题讨论】:
-
阅读条件聚合。另外,请格式化您的问题,以便其他人可以阅读。
-
类似下面的表2中的查询有一些条件。条件相差太大。第二个查询中的 WHERE 子句的一部分是否丢失了,所以第二个中的 WHERE 成为连接条件的一部分?
-
第一个查询中的 5 分钟条件是多余的,因为至少 30 分钟前的行隐含至少 5 分钟前。为什么将
m1.DATE与字符串进行比较?m1.DATE列的数据类型是什么?amount列在哪个表中? -
这两个表有什么关系?
ON m.id=m1.id似乎没有多大意义。这些表不太可能共享相同的唯一 ID。那么,是ON m.id=m1.m_id还是ON m.m1_id=m1.id?或者,换句话说:我可以每 m1 行获得超过 1 个 m 行吗? -
金额在表 1 中,条件没有不同。在第二个查询中,我试图根据表 2 中的决策条件从表 1 中获取行。一旦找到一个决定,我就会得到它的id,然后在表1中得到对应的值..