如何在postgresql中对每个结果条目进行子选择?

时间:2015-12-10 10:16:09

标签: sql postgresql select postgresql-9.3

假设我的表格只有两列:idmaturitymaturity是将来的某个日期,并且在具体条目可用之前具有代表性。因此,它对于不同的条目是不同的,但不一定是唯一的。并且时间数量尚未达到此maturity日期的条目更改。

我需要计算特定日期可用的表格中的一些条目(因此条目尚未达到成熟度)。所以我基本上需要加入这两个查询:

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我需要从生成的系列中输入条目。我确定这必须足够简单,但我无法解决这个问题。我需要得到的解决方案仍然是一个查询,因此似乎我不能用于循环。

示例表条目:

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 

注意:此计数不会持续减少,因为新条目已添加且此计数会​​增加。

2 个答案:

答案 0 :(得分:1)

您必须在子查询的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

答案 1 :(得分:0)

我认为您希望在到期日之前对数据进行分组。

检查一下:

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