我有一个使用TIMESTAMPS的表,需要按月过滤,查询为:
SELECT * FROM tx_gas
WHERE TO_CHAR(date_prod, 'YYYYMM') = '202103';
现在,根据这个查询的结果,我需要使用另一个查询,它按天对日期进行分组,并对同一表中的一个字段求和:
SELECT SUM(liters) AS LITERS,
TO_CHAR( TRUNC(date_prod), 'DD/MM/YYYY') AS GROUPED_DATE
FROM tx_gas
GROUP BY TRUNC(date_prod)
ORDER BY TRUNC(date_prod) ASC;
如何连接这两个查询,以便在一个查询中生成两个分离的查询?
我如何连接这两个查询,以便两个分离的查询可以在一个查询中进行,而第二个查询可以根据第一个查询的结果进行搜索?
查询的源表是在查询本身中编写的。如果不将其设置为不同的查询,就无法使其读取不同的源数据。
但是,假设您的意思是要编写一个新的查询,该查询对第一个查询返回的数据执行与第二个查询相同的聚合,那么在这种情况下非常简单:
SELECT SUM(liters) AS LITERS,
TO_CHAR( TRUNC(date_prod), 'DD/MM/YYYY') AS GROUPED_DATE
FROM tx_gas
WHERE TO_CHAR(date_prod, 'YYYYMM') = '202103';
GROUP BY TRUNC(date_prod)
ORDER BY TRUNC(date_prod) ASC;
WHERE
子句给出的筛选条件控制将哪些数据传递到聚合。两个原始查询在同一个源表上运行,并且只有第一个具有筛选条件,因此将第一个的筛选条件添加到第二个中会产生一个查询,该查询的效果就像您所要求的那样。
SELECT SUM(liters) AS LITERS,
TO_CHAR(TRUNC(date_prod), 'DD/MM/YYYY') AS GROUPED_DATE
FROM tx_gas
WHERE TO_CHAR(date_prod, 'YYYYMM') = '202103'
GROUP BY TRUNC(date_prod)
ORDER BY TRUNC(date_prod) ASC;
这应该奏效;您不需要第二个查询,因为您希望将表筛选为一组行,然后输出并聚合这些结果