我有一张表有这样的记录:
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;
答案 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
条款。