Кто-нибудь использовал tablefunc
для поворота на несколько переменных, а не только с использованием имени строки? Примечания к документации:
Ожидается, что "дополнительные" столбцы будут одинаковыми для всех строк с то же значение row_name.
Я не уверен, как это сделать, не объединяя столбцы, на которые я хочу обратить внимание (что я очень сомневаюсь, даст мне скорость, в которой я нуждаюсь). Один из возможных способов сделать это - сделать числовое число и добавить его в localt как миллисекунды, но это похоже на шаткий способ продолжения.
Я отредактировал данные, использованные в ответе на этот вопрос: Запрос перекрестной пересылки PostgreSQL.
CREATE TEMP TABLE t4 (
timeof timestamp
,entity character
,status integer
,ct integer);
INSERT INTO t4 VALUES
('2012-01-01', 'a', 1, 1)
,('2012-01-01', 'a', 0, 2)
,('2012-01-02', 'b', 1, 3)
,('2012-01-02', 'c', 0, 4);
SELECT * FROM crosstab(
'SELECT timeof, entity, status, ct
FROM t4
ORDER BY 1,2,3'
,$$VALUES (1::text), (0::text)$$)
AS ct ("Section" timestamp, "Attribute" character, "1" int, "0" int);
Возврат:
Section | Attribute | 1 | 0 ---------------------------+-----------+---+--- 2012-01-01 00:00:00 | a | 1 | 2 2012-01-02 00:00:00 | b | 3 | 4
Итак, как указано в документации, дополнительный столбец aka 'Attribute' считается одинаковым для каждого имени строки aka 'Section'. Таким образом, он сообщает b для второй строки, даже если "entity" также имеет значение 'c' для этого значения timeof.
Требуемый выход:
Section | Attribute | 1 | 0
--------------------------+-----------+---+---
2012-01-01 00:00:00 | a | 1 | 2
2012-01-02 00:00:00 | b | 3 |
2012-01-02 00:00:00 | c | | 4
Любые мысли или ссылки?
Немного больше фона: мне, возможно, нужно сделать это для строк миллиардов, и я тестирую хранение этих данных в длинных и широких форматах и вижу, могу ли я использовать tablefunc
для перехода от длинного до широкого формата более эффективно, чем с регулярными агрегатными функциями.
У меня будет около 100 измерений, сделанных каждую минуту примерно для 300 объектов. Часто нам нужно сравнить различные измерения, сделанные для данной секунды для данного объекта, поэтому нам нужно будет часто обращаться к широкому формату. Кроме того, измерения, сделанные на конкретном объекте, сильно различаются.
EDIT: я нашел ресурс по этому вопросу: http://www.postgresonline.com/journal/categories/24-tablefunc.