Sql 使用Oracle中的日期从表中选择最新记录

Sql 使用Oracle中的日期从表中选择最新记录,sql,oracle,Sql,Oracle,我有一个表,其中有一些记录如下: ID MEMBER_ID ENROLL_DATE END_DATE 01 123456789 01-JAN-13 31-DEC-13 02 123456789 01-JAN-06 31-DEC-06 03 123456789 01-JAN-11 31-DEC-11 04 987654321 01-JAN-08 31-DEC-12

我有一个表,其中有一些记录如下:

ID     MEMBER_ID     ENROLL_DATE     END_DATE
01     123456789     01-JAN-13       31-DEC-13
02     123456789     01-JAN-06       31-DEC-06
03     123456789     01-JAN-11       31-DEC-11
04     987654321     01-JAN-08       31-DEC-12
05     987654321     01-FEB-13       31-DEC-99
06     987654321     01-JAN-13       31-JAN-13
with cte as (
  select id, member_id, enroll_date, end_date, 
         row_number() over (partition by member_id order by enroll_date desc) rn
  from myView
  where enroll_date <= to_date('2014/12/01','yyyy/mm/dd')
  )
select *
from cte
where rn = 1
现在,如果我给出一些日期,例如2014年1月12日,它应该返回我最新的注册日期,即01和05,状态为。因此,输出如下:

01     123456789     01-JAN-13     31-DEC-13 Inactive
05     987654321     01-FEB-13     31-DEC-99 Active
我有SQL,它计算状态,但不能只得到一条记录。我怎么能得到这个

select id, member_id, enroll_date, end_date,
  case 
    when TO_DATE(:dateOfCall, 'MM/DD/YYYY') between enroll_date and end_date then 'Active'
    else 'Inactive'
  end
  Status
from myView;
您可以使用row_number-类似于以下内容:

ID     MEMBER_ID     ENROLL_DATE     END_DATE
01     123456789     01-JAN-13       31-DEC-13
02     123456789     01-JAN-06       31-DEC-06
03     123456789     01-JAN-11       31-DEC-11
04     987654321     01-JAN-08       31-DEC-12
05     987654321     01-FEB-13       31-DEC-99
06     987654321     01-JAN-13       31-JAN-13
with cte as (
  select id, member_id, enroll_date, end_date, 
         row_number() over (partition by member_id order by enroll_date desc) rn
  from myView
  where enroll_date <= to_date('2014/12/01','yyyy/mm/dd')
  )
select *
from cte
where rn = 1

这假定您希望按成员id对每个结果进行分组。如果不需要,请删除partition by子句。

最晚的日期总是在末尾,对吗?因此,如果提供的日期恰好是2006年2月28日。。。您想要ID 02还是01?我想如果没有提供数据的记录,您需要最大注册日期和结束日期,否则,您希望记录日期在提供日期之间。@ XQBT -是的,如果给定的日期在范围内,则返回该记录,否则Max CurrasDest.Dead被编辑以解释问题更多。这会考虑注册日期小于GIVN日期,但它应该可以在任何范围内。我已经编辑了原始帖子来解释更多细节。@anjibman-我不确定我是否理解你的问题?即使提供的日期大于注册日期,也会返回小于提供日期的最大注册日期。我只是更新了it返回记录3和4,而不是1和5。@anjibman-您需要将输入更改为-日期为'2012/12/01','yyyy/mm/dd'应为'2014/12/01',“yyyy/mm/dd”-提琴在看2012…@anjibman-这是更新后的提琴,返回1和5: