【发布时间】:2021-08-12 23:02:26
【问题描述】:
我有一个带有以下“签名”的函数:
CREATE OR REPLACE FUNCTION iterate_test()
RETURNS text
LANGUAGE plpgsql
...
以文本形式返回查询:
SELECT DISTINCT(t1.date) AS date, AMD.adjusted_close AS AMD, GME.adjusted_close AS GME FROM clean_daily AS t1 INNER JOIN clean_daily AS AMD ON t1.date=AMD.date AND AMD.ticker='AMD' INNER JOIN clean_daily AS GME ON AMD.date=GME.date AND GME.ticker='GME' ORDER BY t1.date DESC;
如何将此字符串作为查询执行?我试过这样执行:
EXECUTE iterate_test();
EXECUTE QUERY iterate_test();
但我无法让它工作。如何以文本形式执行数据查询?
完整功能代码:
CREATE OR REPLACE FUNCTION iterate_test()
RETURNS text
LANGUAGE plpgsql
AS
$$
DECLARE
temprow record;
str_query text := 'SELECT DISTINCT(t1.date) AS date';
prev_table text := 't1';
BEGIN
FOR temprow IN SELECT * FROM portfolios WHERE user_name='snigelnmjau'
LOOP
str_query := str_query || format(', %s.adjusted_close AS %s', temprow.ticker, temprow.ticker);
END LOOP;
str_query := str_query || format(' FROM clean_daily AS t1 ');
FOR temprow IN SELECT * FROM portfolios WHERE user_name='snigelnmjau'
LOOP
str_query := str_query || format(E'INNER JOIN clean_daily AS %s ON %s.date=%s.date AND %s.ticker=''%s'' ', temprow.ticker, prev_table, temprow.ticker, temprow.ticker, temprow.ticker);
prev_table := temprow.ticker;
END LOOP;
str_query := str_query || 'ORDER BY t1.date DESC;';
--EXECUTE str_query;
RETURN str_query;
END;
$$;
【问题讨论】:
-
与您的问题无关,但是:
distinct不是函数。它始终适用于选择列表中的所有列。用括号括住其中一列不会改变任何东西并且是无用的。distinct (a),b与distinct a,(b)或distinct a,b相同
标签: sql postgresql