如何在 postgresql 中为每个结果条目做一个 sub-select?

How to do a sub-select per result entry in postgresql?

假设我有一个只有两列的 table:idmaturitymaturity 是将来的某个日期,代表特定条目可用的时间。因此,它对于不同的条目是不同的,但不一定是唯一的。并且随着时间的推移,尚未达到此 maturity 日期的条目数量发生变化。

我需要计算在特定日期可用的 table 中的条目数(因此条目尚未到期)。所以我基本上需要加入这两个查询:

SELECT generate_series as date FROM generate_series('2015-10-01'::date, now()::date, '1 day'); 
SELECT COUNT(id) FROM mytable WHERE mytable.maturity > now()::date;

而不是 now()::date 我需要从生成的系列中输入条目。我确信这必须足够简单,但我不能完全绕过它。我需要生成的解决方案来保留查询,因此我似乎不能使用循环。

示例 table 条目:

id | maturity
---+-------------------
 1 | 2015-10-03
 2 | 2015-10-05
 3 | 2015-10-11
 4 | 2015-10-11

预期输出:

    date    | count 
------------+-------------------
 2015-10-01 |                 4 
 2015-10-02 |                 4
 2015-10-03 |                 3 
 2015-10-04 |                 3 
 2015-10-05 |                 2
 2015-10-06 |                 2 

注意:此计数不会不断减少,因为添加了新条目并且此计数会​​增加。

我想你想按到期日对数据进行分组。

检查这个:

select maturity,count(*) as count 
from your_table group by maturity;

您必须在子查询的 WHERE 子句中使用外部查询的字段。如果子查询在外部查询的 SELECT 子句中,则可以这样做:

SELECT generate_series,
  (SELECT COUNT(id)
  FROM mytable
  WHERE mytable.maturity > generate_series)
FROM generate_series('2015-10-01'::date, now()::date, '1 day');

更多信息:http://www.techonthenet.com/sql_server/subqueries.php