使用日期在另一个SELECT之后选择一个查询



我有一个使用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;

这应该奏效;您不需要第二个查询,因为您希望将表筛选为一组行,然后输出并聚合这些结果

最新更新