回答

收藏

将表结果合并到列中(数据透视表/交叉表?)

技术问答 技术问答 229 人阅读 | 0 人回复 | 2023-09-12

我有大约30个表,从外部系统获取流数据。我试图找出如何在特定时间点检索表的最后一个已知值,并以方便的方式显示它们。
4 V, ~( P9 m4 i! q4 M让我们描述一下表格的布局:; V- w8 G; z: z+ S0 H% B
DROP TABLE IF EXISTS table1;DROP TABLE IF EXISTS table2;CREATE TABLE IF NOT EXISTS table1 (    id                                                                                                                                                                                                                                          INT NOT NULL,   id2                                                                                                                                                                                                          TEXT NOT NULL,   update_time     TIMESTAMP(6) NOT NULL,   val             NUMERIC NULL,   PRIMARY KEY (id1,id2,update_time));CREATE TABLE IF NOT EXISTS table2 (    id                                                                                                                                                                                                                                          INT NOT NULL,   id2                                                                                                                                                                                                          TEXT NOT NULL,   update_time     TIMESTAMP(6) NOT NULL,            val             INT NULL,   PRIMARY KEY (id1,id2,update_time));--...tableN(INSERT INTO table1(id1,id2,update_time,val) VALUES (1,'ident 1','2004-10-19 09:00:00',1.23);INSERT INTO table1(id1,id2,update_time,val) VALUES (1,'ident 1','2004-10-19 10:05:00',1.25);INSERT INTO table2(id1,id2,update_time,val) VALUES (1,'ident 1','2004-10-19 10:03:00,23);INSERT INTO table2(id1,id2,update_time,val) VALUES (1,'ident 1','2004-10-19 10:03:30',null);现在,让我呈现数据的最佳方式是:
4 _7 Q4 U" f7 CSELECT *FROM lastknownvaluesWHERE id1 = 1AND id2 = 'ident 1'AND time = '2004-10-19 10:04:00'这将返回单行:8 H/ L% E" \; F' l
time                     id1    id2     table1    table2'2004-10-19:04:00,  1       ident1  1.23       null10:04:00表1中04:00表1.23(后来1.25更新)表2在10:03:30更新null,所以结果应该是null。请注意,表中val不同类型的数据。8 Z( i# c' I9 ^& s. D
我一直在努力处理数据透视表/交叉表,因为它看起来足够接近我想要找到的功能,但我不知道该怎么办。你能弄清楚吗?- p9 c3 _8 r/ d9 R4 y
后续问题:如果我想在一个时间间隔内检索所有值,以获得两个时间戳之间的所有组合信息怎么办?例如,如果使用start_timestamp 2004-10-196 V& s: y# V: {$ a1 `
09:00:00和end_timestamp 2004-10-选择19 10:04:00,结果如下:
* V1 \  K9 g% v2 M' N/ ?time                     id1    id2     table1    table2'2004-10-1909:00:00   1      ident1  1.23       null'2004-10-19 10:03:00   1     ident1  1.23       23'2004-10-19 10:03:30   1    ident1  1.23       null可能的..?(请注意,我在30个表中获得了与上述输出相结合的数据), s0 r3 x: ^) R, w/ n
                                                                * F% t8 k1 }, N! v  C9 T- R4 z
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则