如何在 postgresql 中为每个结果条目做一个 sub-select?
How to do a sub-select per result entry in postgresql?
假设我有一个只有两列的 table:id
、maturity
。 maturity
是将来的某个日期,代表特定条目可用的时间。因此,它对于不同的条目是不同的,但不一定是唯一的。并且随着时间的推移,尚未达到此 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');
假设我有一个只有两列的 table:id
、maturity
。 maturity
是将来的某个日期,代表特定条目可用的时间。因此,它对于不同的条目是不同的,但不一定是唯一的。并且随着时间的推移,尚未达到此 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');