Я пытаюсь создать и вернуть сводную таблицу в функции pgsql.У меня проблема в том, что количество столбцов, возвращаемых функцией, зависит от того, какой диапазон дат выбирает пользователь.
В настоящее время я использую функцию colpivot (https://github.com/hnsl/colpivot/blob/master/README.md), и она отлично работает в стандартных запросах, но не в функции, поскольку тип возвращаемого значения должен быть установлен во время вызова.
Подход
Шаг 1:
create temp table _test (
dt timestamp without time zone, id integer, NumericValue numeric
)
Шаг 2:
insert into _test(dt , id ,NumericValue)
SELECT DISTINCT "T03017_PSR_LOG"."DateTime",
"T03017_PSR_LOG"."ID",
"T03017_PSR_LOG"."NumericValue"
FROM "T03017_PSR_LOG"
INNER JOIN "T03002_PSR_TAG_REG" ON "T03017_PSR_LOG"."TagID" = "T03002_PSR_TAG_REG"."TagID"
WHERE "T03017_PSR_LOG"."DateTime" > 2018-10-02 AND "T03017_PSR_LOG"."DateTime" < 2018-10-07,
ORDER BY "DateTime", "ID";
Шаг 3:
select colpivot('_test_pivoted', 'select * from _test', array['tagid'], array['dt'], '#.numericvalue', null);
select * from _test_pivoted order by tagid;
ЕслиЯ запускаю приведенный выше в качестве стандартного запроса, он будет возвращать что-то вроде:
ID 2018-10-03 2018-10-04 2018-10-05 2018-10-06
10 1405717.00 1453189.00 1499992.00 1546791.00
11 359102.00 371282.00 383042.00 395047.00
Мне нужно что-то вроде приведенной выше таблицы, чтобы вернуться из функции, где диапазон datetime будет 2 переменные, переданные в функцию, однакоЯ не могу найти решение для этого, так как я не уверен, как установить тип возвращаемого значения в верхней части функции из-за динамического характера возвращаемых столбцов.