繁体   English   中英

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

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

假设我有一个只有两列的表: idmaturity maturity日是将来的某个日期,代表直到有特定条目可用时为止。 因此,对于不同的条目它是不同的,但不一定是唯一的。 随着时间的推移,尚未达到此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 

注意:由于添加了新条目并且此计数增加,因此该计数不会持续减少。

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

我认为您想按到期日期对数据进行分组。

检查一下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM