当前位置: 首页 > 面试题库 >

使用另一个查询的输出动态执行查询

连志义
2023-03-14
问题内容

我有一个名为generate_table的函数,该函数需要2个输入参数(rundate::datebranch::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,但是我无法使其正常工作。

有关如何执行此操作的任何建议?


问题答案:

您可以使用 LATERAL JOIN Postgres 9.3+中的新增功能通过普通的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项之前添加,但在这种情况下,它是一个干扰词,因为函数表达式FROM在任何情况下都可以引用较早的项。

在旧版本中,可以通过扩展SELECT列表中用于返回集合的函数的行来实现这一点,但是新语法LATERAL更加简洁。无论如何,对于Postgres
9.2或更早的版本:

SELECT generate_table(max(rundate), branch)
FROM   t_index_of_imported_files
GROUP  BY branch;


 类似资料:
  • 问题内容: 我进行了很多搜索,但找不到有用的答案: 我想通过用户给我一个开始和结束日期来列出用户定义的时间段的总计。从开始日期到开始日期之间的每次总计应该相加,并在每一天添加1天。因此最后一行给出了从开始到结束日期的总计。示例:-给定期间=开始2013-01-01,结束= 2013-01-31 所以我有一个查询谁计算所有天: 我有一个查询谁每天计算总数 现在将这两者结合起来很难得到我的最终结果。

  • 问题内容: 我有一个关于使用JdbcTemplate进行动态查询的问题。 我的代码如下: 现在,我的问题是,我想要与插入查询中的自动生成问号相同数量的“值”。 现在,值变量考虑为一个字符串,因此,如果我有2个或更多问号,则在值变量中只有一个用逗号分隔的完整字符串,因此它不起作用。 见下面我的查询: 我想要如下: 问题答案: }

  • 我已经找到了解决方案(我认为),我将要求在甲骨文和SQL服务器上的问题,但似乎无法将其转化为Postgres解决方案。我正在使用Postgres 9.3.6。 这个想法是能够生成有关表内容的“元数据”以用于分析目的。这只能通过为每列运行查询来完成 (AFAIK),以便找出,比如说......最小值/最大值/计数值等。为了自动执行该过程,最好先由数据库生成查询,然后执行。 使用示例表,我能够使用以下

  • 我想在 SQL Server 2008 中完成以下操作 我有一个如下文章表 还有这样的订单预测表。 有没有办法创建一个查询,按照< code>order列的顺序为预测表中的每条记录生成一列。如果可能的话,我怎么能这样做呢?

  • 我正在为spring批处理使用java配置(spring boot)。我有一个员工Id列表,对于每个Id,我需要运行一个查询(如下所示),然后处理数据。 我知道我们可以使用阅读器。setPreparedStatementSetter动态设置上述SQL中的参数。但是,我不确定如何对列表中的每个员工id重复批处理过程。即使我将reader()标记为@StepScope,也只会调用一次reader。(即

  • 我有两个表TABLE_A,列名为COLUMN1 COLUMN2 COLUMN3 COLUMN 4 COLUM5 abc def ghi jkl mno 123 456 789 001 121 TABLE_B列名为COLUMN6 COLUMN7,其数据为 专栏5 124 第4列bca 第3列aaa 列5 BBB 所以我将Table_A的列名作为Table_B中的数据 所以我想在一个查询中做这样的事情