我有一个名为的 SQL 函数get_forecast_history(integer,integer)
这需要两个参数,一个月和一年。该函数返回使用以下命令创建的自定义类型:
CREATE TYPE fcholder AS (y integer, m integer, product varchar, actual real);
函数定义的第一行是:
CREATE OR REPLACE FUNCTION get_forecast_history(integer, integer)
RETURNS SETOF fcholder AS $$
Calling:
SELECT * FROM get_forecast_history(10, 2011);
例如,生成下表(函数的结果类型是表,即SETOF
):
y m product actual
---- -- -------- ------
2011 10 Product1 29
2011 10 Product2 10
2011 10 Product3 8
2011 10 Product4 0
2011 10 Product5 2
等(共约30种产品)。这是给定月份的历史记录。
我还有另一个生成一系列月份的查询:
SELECT to_char(DATE '2008-01-01'
+ (interval '1 month' * generate_series(0,57)), 'YYYY-MM-DD') AS ym
哪些产品的列表如下:
ym
----------
2008-01-01
2008-02-01
2008-03-01
2008-04-01
...
2011-10-01
我需要以某种方式LEFT JOIN
的结果generate_series
通过取以下结果,对上述函数进行年/月组合generate_series
并将它们作为参数传递给函数。这样我就可以得到函数的结果,但是对于每个年/月的组合generate_series
。此时我被困住了。
我正在使用 PostgreSQL 8.3.14。