【发布时间】:2015-05-28 16:51:07
【问题描述】:
我遇到了类似这样的查询:
SELECT *
FROM invoicable_interval i,
LATERAL partition_into_months(i.start_date, i.stop_or_current_date) p;
... partition_into_months 的定义类似于:
CREATE FUNCTION partition_into_months(start_date DATE, stop_date DATE)
RETURNS TABLE (start_date DATE, stop_date DATE, days INT)
AS $$ ... $$
LANGUAGE sql
IMMUTABLE;
所以我正在对辅助表进行可变间隔的交叉连接,因此使用(冗余)关键字 LATERAL。
这适用于 PostgreSQL 9.3.6 和 9.4.2,但是,对于 9.1.3,我收到以下错误消息:
[42601] ERROR: syntax error at or near "."
Position: 398
指示的位置是表达式“i.start_date”中的点。
如何重写此 SQL 查询以将其移植回 PostgreSQL 9.1.3?
【问题讨论】:
-
在我看来,该函数可以被(聚合)视图和/或 generate_series() 替换。显然,取决于函数的主体。
标签: sql postgresql postgresql-9.3 lateral