У меня есть функция SQL с именем get_forecast_history(integer,integer)
, которая принимает два аргумента: месяц и год.Функция возвращает CUSTOM TYPE, созданный с:
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 $$
Вызов:
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.