gpt4 book ai didi

sql - 合并多个表中的最新条目

转载 作者:行者123 更新时间:2023-11-29 12:20:21 25 4
gpt4 key购买 nike

我有一个 master 表,里面有很多 ID:

ID  ...
0 ...
1 ...

还有多个表(比如 vtbl1vtbl2vtbl3),外键指向 master,一个时间戳和一个值:

ID  Timestamp    Value
0 01/01/01.. 2
1 01/01/02.. 7
0 01/01/03.. 5

我想为 master 中的每个 ID 获取一个或多个条目,其中一个条目(如果不存在条目则为 null)包含每个 中的最新条目code>v... 表(按时间戳分组):

ID  Timestamp    vtbl1.Value   vtbl2.Value   vtbl3.value
0 01/01/03.. 5 2
0 01/01/01.. 4
1 01/01/02.. 7 4 9

我确信这相当简单,但我的 SQL 生疏了,我一直在兜圈子。任何帮助将不胜感激。

澄清

这些值来自一个或多个能够读取一个或多个值的传感器。因此,ID 的每个值表中的最新 将被视为该ID 的当前系统状态。如果时间戳匹配,则它们被视为一次更新。

我需要每个 ID 所需的最小更新集,以提供当前状态的完整数据集。

值也可以是不同类型

最佳答案

如果我正确理解您的问题,一种选择是使用条件聚合和union all:

select id, timestamp, 
max(case when tbl = 'tbl1' then value end) t1value,
max(case when tbl = 'tbl2' then value end) t2value,
max(case when tbl = 'tbl3' then value end) t3value
from (
select id, timestamp, value, 'tbl1' tbl
from tbl1
union all
select id, timestamp, value, 'tbl2' tbl
from tbl2
union all
select id, timestamp, value, 'tbl3' tbl
from tbl3
) t
group by id, timestamp

或者,如果每个 id 有多个记录,并且您想要每个 timestamp 的最高 value,您可以包括 row_number( ) 在你的子查询中:

select id, timestamp, 
max(case when tbl = 'tbl1' then value end) t1value,
max(case when tbl = 'tbl2' then value end) t2value,
max(case when tbl = 'tbl3' then value end) t3value
from (
select id, timestamp, value, 'tbl1' tbl,
row_number() over (partition by id order by timestamp desc) rn
from tbl1
union all
select id, timestamp, value, 'tbl2' tbl,
row_number() over (partition by id order by timestamp desc) rn
from tbl2
union all
select id, timestamp, value, 'tbl3' tbl,
row_number() over (partition by id order by timestamp desc) rn
from tbl3
) t
where rn = 1
group by id, timestamp

如果每个子表中的 max(timestamp) 值不同,这可能会变得困难。那时你加入哪个?

关于sql - 合并多个表中的最新条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29334177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com