Oracle 如何获取最新的活动记录

Oracle 如何获取最新的活动记录,oracle,oracle11g,oracle-sqldeveloper,Oracle,Oracle11g,Oracle Sqldeveloper,这是我的数据。会员可以多次注册并随时更改计划,我需要获取ID 1的最新接近getdate的C_级别数据,即“2017年8月1日”,因为ID 2没有最新数据,因此我们必须显示2016年12月31日的记录 ID Start_Date End_Date C_Level 1 1/1/2016 12/31/2016 1 1 1/1/2017 8/1/2017 2 1 9/1/2017 12/31/2017 3 1 1/1/2018 12/31/2018 0

这是我的数据。会员可以多次注册并随时更改计划,我需要获取ID 1的最新接近getdate的C_级别数据,即“2017年8月1日”,因为ID 2没有最新数据,因此我们必须显示2016年12月31日的记录

ID Start_Date End_Date   C_Level
1  1/1/2016  12/31/2016    1
1  1/1/2017  8/1/2017      2
1  9/1/2017  12/31/2017    3
1  1/1/2018  12/31/2018    0
2  1/1/2015  12/31/2015    2
2  1/1/2016  12/31/2016    3

如果我正确理解您的需求,那么此查询将给出您想要的:

WITH current_running AS (
  SELECT to_date( '8/1/2017','mm/dd/rrrr') As Current_running_date
  FROM dual
)
SELECT * FROM (
   SELECT t.*,
          row_number() Over (partition by id order by end_date desc ) As rn,
          c.Current_running_date
   FROM Table1 t
   JOIN current_running c
   ON c.Current_running_date >= ANY( t.Start_Date, t.End_Date )
)
WHERE rn = 1
;
演示:


对于当前运行日期=
2017-08-01
给出:

| ID |            START_DATE |              END_DATE | C_LEVEL | RN | CURRENT_RUNNING_DATE |
|----|-----------------------|-----------------------|---------|----|----------------------|
|  1 | 2017-01-01 00:00:00.0 | 2017-08-01 00:00:00.0 |       2 |  1 | 2017-08-01T00:00:00Z |
|  2 | 2016-01-01 00:00:00.0 | 2016-12-31 00:00:00.0 |       3 |  1 | 2017-08-01T00:00:00Z |
当前运行日期=
2016-07-15

| ID |            START_DATE |              END_DATE | C_LEVEL | RN | CURRENT_RUNNING_DATE |

|----|-----------------------|-----------------------|---------|----|----------------------|
|  1 | 2016-01-01 00:00:00.0 | 2016-12-31 00:00:00.0 |       1 |  1 | 2016-07-15T00:00:00Z |
|  2 | 2016-01-01 00:00:00.0 | 2016-12-31 00:00:00.0 |       3 |  1 | 2016-07-15T00:00:00Z |

你所说的“最新数据”是什么意思?为什么ID1有“最新数据”,而ID2没有?ID1注册到2019年,但ID2在系统中不再活跃,他可能会过期/切换到不同的保险公司。ID1注册到2017年8月1日的c_级别“2”,从2017年9月1日起,他切换到c_级别“3”,如果我执行查询,我应该得到“2017年8月1日”行,如果我在2017年9月1日执行查询,我将得到2017年9月1日,尝试改写或给出更多示例。目前的形式不清楚。我不太确定这里需要什么样的例子,这都是关于医疗保险注册的,例如,我在年初注册了,3个月后我改变了计划或明年注册了不同的计划,数据会不时地改变。哇,看起来不错,我正在验证所有的场景,请给我一些时间对此给予反馈,你太棒了:)