Sql Oracle联接两个表,其中联接到表返回联接(父?)表限制的结果集中最高的一个?
对不起,标题太长了,但要把它浓缩成一个简短的标题是很困难的 我有两个表,一个自动维护日志表和一个自动跳闸日志表,如下所示: 自动维护日志:Sql Oracle联接两个表,其中联接到表返回联接(父?)表限制的结果集中最高的一个?,sql,oracle,join,Sql,Oracle,Join,对不起,标题太长了,但要把它浓缩成一个简短的标题是很困难的 我有两个表,一个自动维护日志表和一个自动跳闸日志表,如下所示: 自动维护日志: 自动识别码 维护日期时间 维护说明 自动跳闸日志: 自动识别码 行程时间 终点里程表 我需要为每个自动选择所有维护事件,对于每个事件,从行车日志表中查找维护时的最新结束里程表值。我成功完成此任务的唯一方法是使用一个函数(即get_里程表(auto_id,maint_datetime)作为我查询中的一列),在该函数中,对行程日志中的里程表读数进行评估,
- 自动识别码
- 维护日期时间
- 维护说明
- 自动识别码
- 行程时间
- 终点里程表
谢谢,您可以使用相关子查询来完成此操作:
select aml.*,
(select max(atl.ending_odometer)
from auto_trip_log atl
where alt.auto_id = aml.auto_id and
atl.trip_datetime <= aml.maint_datetime
) as ending_odometer
from auto_maint_log aml;
我希望这个假设是正确的,但不幸的是,里程表条目有时输入错误,因此依赖于最近一次的行程而不是之前所有行程的max()。@SuperDave。这只是一个简单的假设。您仍然可以使用
keep
子句来执行此操作。第二个查询可能返回多行。Gordon提供了一个很好的解决方案,下面是一个相关子查询,但我在最初的帖子中没有提到里程表数据的有效性总是有问题,因此我必须依赖最新的条目,而不仅仅是max()过去的价值观。我很抱歉遗漏了那个细节。(我试着把你的答案标记为有用,但我显然不希望新手这么做.)
select aml.*,
(select max(atl.ending_odometer) over (dense_rank first order by atl.trip_datetime desc)
from auto_trip_log atl
where alt.auto_id = aml.auto_id and
atl.trip_datetime <= aml.maint_datetime
) as ending_odometer
from auto_maint_log aml;