sql - 根据其他列的值选择数据子集的最大值
问题描述
我希望根据第一个表中的特定值从另一个表中的数据子集左连接一个值。以下是示例表:
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
上或之前的所有行。date
table1
因此,结果表如下所示:
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。我不确定这是否是解决我的问题的正确逻辑;任何帮助将不胜感激!
解决方案
您可以使用相关子查询:
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
orselect top (1)
或其他东西,具体取决于您的数据库。
推荐阅读
- html - 如何将色调(悬停时)应用于背景图像大小设置为包含的 div?
- c++ - c++ 错误:对“g”的调用不明确。通过引用和常规函数参数
- java - Apache Camel 无法修改 json 响应
- java - java获取Token的方法
- javascript - 如何在反应组件中引用外部Javascript文件
- python - 解析 ElasticSearch 时间格式
- wpf - 使用绑定 Avalonia 的条件 DataTemplate 选择
- hadoop - 运行带有 Oozie 错误的 Sqoop:无法从空字符串创建路径
- java - 无法在 Spring MVC 中构建项目
- excel - 根据员工姓名在每行显示/隐藏个人资料图片?