sql - Oracle - 仅返回最早日期当前或将来的日期

标签 sql oracle date

假设我有一个“机会”表(机会可以有多个截止日期),如下所示:

机会

id    opp_id    deadline
---------------------------
1     40        20-Jan-2016
2     40        13-Jan-2016
3     40        20-Apr-2016
4     40        13-Apr-2016
5     73        29-Sep-2015
6     95        11-Dec-2016

假设今天的日期是15-Jan-2016,应该返回的是:

id    opp_id    deadline
---------------------------
6     95        11-Dec-2016

但是,如果我们假设今天的日期是 2015 年 12 月 16 日,我期望收到的行是:

id    opp_id    deadline
---------------------------
1     40        20-Jan-2016
2     40        13-Jan-2016
3     40        20-Apr-2016
4     40        13-Apr-2016
6     95        11-Dec-2016

基本上,逻辑是在所有截止日期都在今天或将来的情况下获得这些机会。我仍然可以申请这些机会,因为我仍然可以在截止日期前完成。

我该如何去做呢?

编辑

我想我还应该澄清,如果某个机会的最后期限已过,我不想获得该特定机会的其余最后期限。基本上,如果最早的截止日期已过,我不想为此机会检索任何内容。

最佳答案

一种方法使用分析函数:

select o.*
from (select o.*, min(deadline) over (partition by opp_id) as min_deadline
      from opportunities o
     ) o
where min_deadline >= sysdate;

您也可以使用 not contains 来执行此操作;

select o.*
from opportunities o
where not exists (select 1
                  from opportunities o2
                  where o2.opp_id = o.opp_id and o2.deadline < sysdate
                 );

关于sql - Oracle - 仅返回最早日期当前或将来的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34321370/

相关文章:

sql - Oracle Exadata - LEFT OUTER JOIN 在连接条件下使用 AND 时表现得像 INNER

sql-server - TSQL 日期时间大小

sql - 插入 sql 行而不是删除的行会使数据库大小增加或保持不变

MySQL VIEW 在 where 语句中具有变形类型

oracle - SQL 错误 : ORA-01401: inserted value too large for column

oracle - 分析 Oracle 9i 中的表 V/s DBMS_STATS

javascript - 如何在 JavaScript 中验证包含 “00:07 PM” 的日期?

sql - 在postgresql中获取当前日期和给定月份之间的日期

mysql - 如何更新 MySQL 中的所有列

c# - 在配置文件中选择不同类型的数据库