Oracle SQL-查找特定日期之后的第一条记录

时间:2018-10-15 15:11:27

标签: sql oracle

我正在使用Oracle SQL,但遇到了问题。

我有一张桌子 TableA ,在这里我可以得到车辆的归还日期。

我还有另一个表 TableB ,从中可以得到车辆的检查日期。该表有一个名为 id 的列,其中id = 2表示已检查车辆。可以对车辆进行多次检查

是否有可能在返回日期之后得到第一个检验日期?

它尝试了以下类似操作,但似乎还很遥远。有什么想法吗?

select a.returndate, b.time as inspectdate
from tabel a
join tabelb b on a.vehicleid = b.vehicleid where b.id = 93
where a.vehicle= 011 and min(b.time) > a.returndate;

2 个答案:

答案 0 :(得分:2)

如果您拥有Oracle 12c,这是CROSS APPLY的一个很好的用例:

select a.returndate, b.inspectdate
from tabela a
CROSS APPLY ( SELECT * FROM tabelb b 
              WHERE b.vehicleid = a.vehicleid
              AND   b.inspectdate > a.returndate
              ORDER BY b.inspectdate
              FETCH FIRST 1 ROW ONLY ) b
where  a.vehicleid = 011

对于tabela中的每一行,CROSS APPLY将找到比tabelb晚的returndate条记录,按inspectdate进行排序并给您仅第一个。

与IT Alex的回答相比,它的优势在于它的工作不受a.vehicleid的限制。也就是说,您可以一次在许多车辆上运行它(例如,在报告或摘要屏幕中)。

答案 1 :(得分:1)

select a.returndate, b.inspectdate
from tabel a
join tabelb b on a.vehicleid = b.vehicleid
where a.vehicle= 011 
and   b.inspectdate > a.returndate
and   b.id = 93
order by b.inspectdate asc;

获取超过返回日期的检查日期,然后从最旧到最新进行排序。第一行是退货后第一次检查的日期。