sql—基于其他列的值在数据子集上选择最大值

oug3syen  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(252)

我希望基于第一个表中的特定值,从另一个表中的数据子集左联接一个值。以下是示例表:

table1
-----------------
key    date
1    2020-01-02
2    2020-03-02
table2
-----------------
key    date    value
1    2019-12-13    a
1    2019-12-29    b
1    2020-01-14    c
1    2020-02-02    d
2    2019-11-01    e
2    2019-12-02    f
2    2020-04-29    g

基于 date 对于中的特定键值 table1 ,我要选择最近的( MAX(date) )从 table2 ,在哪里 temp 包含该键值的所有行,其中 date 是在 datetable1 .
因此,生成的表如下所示:

key    date    value
1    2020-01-02    b
2    2020-03-02    f

我想我可以使用某种类型的逻辑来为每个人创建临时表 key 价值何处 temp.date <= table1.date ,然后选择 MAX(temp.date) 从temp表中选择 value . 例如,的temp表 key = 1 可能是:

date    value
1    2019-12-13    a
1    2019-12-29    b

然后它将左连接值b key = 1 ,自max( date ) = 2019-12-29. 我不确定这是否是解决我问题的正确逻辑;任何帮助都将不胜感激!

rxztt3cl

rxztt3cl1#

可以使用相关子查询:

select t1.*,
       (select t2.value
        from table2 t2
        where t2.key = t1.key and t2.date <= t1.date
        order by t2.date desc
        fetch first 1 row only
       ) as value
from table1 t1;

请注意,并非所有数据库都支持该标准 fetch first 条款。您可能需要使用 limit 或者 select top (1) 或者其他什么取决于你的数据库。

相关问题