0

我基本上有一个非常复杂的视图,它当前返回上周聚合中我想要的内容。

SELECT *
FROM ...
WHERE  t1.event_date >= ('now'::text::date - 7) 
...

现在我希望能够对任何给定的 2 个日期进行相同的计算,所以我希望能够将参数传递给我的视图。几乎我想用类似的东西替换 WHERE 子句:

WHERE  t1.event_date BETWEEN %first date% AND %second_date%

我认为我应该能够使用集合返回函数来做到这一点,但无法确切地知道如何做到这一点。有任何想法吗?

4

1 回答 1

1

创建一个函数(有时称为表函数,当返回一组行时)。有许多(过程)语言,特别是PL/pgSQL。在你的情况下LANGUAGE sql,这项工作:

CREATE OR REPLACE FUNCTION get_user_by_username(d1 date, d2 date)
  RETURNS TABLE ( ... ) AS
$body$

SELECT ...
WHERE  t1.event_date >= $1
AND    t1.event_date <  $2  -- note how I exclude upper border

$body$ LANGUAGE sql;

许多示例之一LANGUAGE sql
从 PL/pgSQL 函数返回行

许多示例之一LANGUAGE plpgsql
PostgreSQL:错误:42601:返回“记录”的函数需要列定义列表

于 2013-10-20T22:24:24.527 回答