我有一个名为generate_table的函数,它接受2个输入参数(rundate::date
和branch::varchar
)
现在我正在尝试使用PLPGSQL处理第二个函数,它将获得所有分支的列表以及每个分支的最新日期,并将其作为参数传递给generate_table函数。
我的查询是:
select max(rundate) as rundate, branch
from t_index_of_imported_files
group by branch
结果如下:
rundate;branch
2014-03-13;branch1
2014-03-12;branch2
2014-03-10;branch3
2014-03-13;branch4
我需要的是该函数运行类似这样的
select generate_table('2014-03-13';'branch1');
select generate_table('2014-03-12';'branch2');
select generate_table('2014-03-10';'branch3');
select generate_table('2014-03-13';'branch4');
我一直在阅读很多关于PLPGSQL的内容,但到目前为止,我只能说我几乎不了解基础知识。
我读到可以使用连接来获取所有值,然后在函数中使用EXECUTE,但我无法使其正常工作。
有关如何执行此操作的任何建议?
答案 0 :(得分:2)
您可以使用Postgres 9.3 +中的新LATERAL JOIN
进行简单的SELECT查询来执行此操作
SELECT *
FROM (
SELECT max(rundate) AS rundate, branch
FROM t_index_of_imported_files
GROUP BY branch
) t
, generate_table(t.rundate, t.branch) g; -- LATERAL is implicit here
LATERAL
也可以在函数调用FROM
项之前,但在此处 case是一个干扰词,因为函数表达式可以参考 在任何情况下都是早期的FROM
项。
通过在SELECT
列表中扩展set-returns函数的行,旧版本可以实现相同的功能,但LATERAL
的新语法更清晰。无论如何,对于Postgres 9.2或更早版本:
SELECT generate_table(max(rundate), branch)
FROM t_index_of_imported_files
GROUP BY branch;
答案 1 :(得分:0)
select generate_table(max(rundate) as rundate, branch)
from t_index_of_imported_files
group by branch
答案 2 :(得分:0)
无需做任何太花哨的事。
SELECT generate_table(rundate,branch) FROM (
SELECT max(rundate) AS rundate, branch
FROM t_index_of_imported_files
GROUP BY branch) x;