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

时间:2014-12-04 19:30:12

标签: 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
05     987654321     01-FEB-13       31-DEC-99
06     987654321     01-JAN-13       31-JAN-13

现在如果我提供一些日期(例如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;

1 个答案:

答案 0 :(得分:1)

您可以使用row_number - 类似这样的内容:

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

这假设您希望按member_id对每个结果进行分组。如果不需要,请删除partition by条款。