我有大量的查询,其中一些可能需要半个小时才能运行,其中许多查询返回超过20个左右的列(是的,它们是标准化的).我感兴趣的是将所有这些数据存储在单个表中,格式为Timestamp,name,value,这是为了以后对数据的自动化.
T1,V1t1,V2t1,V3t1 T2,V1t2,v2t2,v3t2 -- -- -- --
我希望格式化数据
T1,Name(V1),V1t1 T1,Name(V2),V2t1 T1,Name(V3),V1t2 T2,V2t2 T2,V3t2
我知道我可以通过为每个值v1,v2和v3选择联合来做到这一点,
但是我对速度感兴趣,并希望避免发出3个查询,我可以在其中获取数据(尽管是wroung格式)…或者在实际情况下,不要发出20-30个查询,可以在一.
所以问题是,除了转储到临时表并将后续选择运行到表的相关列并将它们组合在一起之外,还有一种方法可以做到这一点.
提前致谢
解决方法
您可以使用以下查询的变体实现所需的功能.
CREATE TABLE data ( sampleTime timestamptz,value1 numeric,value2 numeric,value3 numeric ); INSERT INTO data(sampleTime,value1,value2,value3) values(Now(),1,2,3); INSERT INTO data(sampleTime,4,5,6); SELECT data.sampleTime,CASE WHEN generate_series = 1 THEN 'value1' WHEN generate_series = 2 THEN 'value2' ELSE 'value3' END AS key,CASE WHEN generate_series = 1 THEN value1 WHEN generate_series = 2 then value2 ELSE value3 END AS value FROM data,generate_series(1,3) ORDER BY data.sampleTime,generate_series
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。