首页 > 解决方案 > 根据其他列的值选择数据子集的最大值

问题描述

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

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特定键值 from 的值table1,我想选择最近的 ( MAX(date)) from table2,其中temp包含该键值在fromdate上或之前的所有行。datetable1

因此,结果表如下所示:

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

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

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

然后它将左加入值 b key = 1,因为 MAX( date) = 2019-12-29。我不确定这是否是解决我的问题的正确逻辑;任何帮助将不胜感激!

标签: sql

解决方案


您可以使用相关子查询:

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子句。您可能需要使用limitorselect top (1)或其他东西,具体取决于您的数据库。


推荐阅读