首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL -在特定日期之后查找第一条记录

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

Stack Overflow用户
提问于 2018-10-15 15:11:27
回答 2查看 739关注 0票数 0

我正在使用Oracle SQL,并遇到了一个问题。

我有一张桌子TableA,在那里我可以得到一辆车的退货日期。

我有另一张桌子TableB,在那里我可以得到车辆的检验日期。该表有一个名为id的列,其中id =2表示对车辆进行了检查。这辆车有可能经过多次检查。

有可能在返回日期之后获得第一次检验日期吗?

它尝试了类似于下面的方法,但它似乎是遥不可及。有什么想法吗?

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-15 15:27:11

如果您有Oracle12c,这是CROSS APPLY的一个很好的用例:

代码语言:javascript
复制
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将查找比returndate晚的tabelb记录,按inspectdate对它们进行排序,并只为您提供第一个记录。

这比IT亚历克斯的回答更有优势,因为它在a.vehicleid上没有限制。也就是说,您可以同时为许多车辆运行它(例如,在报告或摘要屏幕中)。

票数 2
EN

Stack Overflow用户

发布于 2018-10-15 15:20:47

代码语言:javascript
复制
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;

抓取超过退货日期的检查日期,然后从最老到最新订购。第一行将是返回后第一次检查的日期。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52819776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档