如何从当前日期获取以前的记录?

时间:2019-01-25 15:29:54

标签: sql

我有一个既有当前记录又有以前记录的表:

|   PERIOD     |    START DATE      |      END DATE      | VAL1  |  VAL2 |
|   218413     | 25-JAN-19 00:00:00 | 20-MAY-19 00:00:00 |  MA   |   12  |
|   218413     | 25-JAN-19 00:00:00 | 20-MAY-19 00:00:00 |  MA   |   21  |
|   218413     | 25-JAN-19 00:00:00 | 20-MAY-19 00:00:00 |  MA   |   32  |
|   218512     | 24-JAN-19 00:00:00 | 20-MAY-19 00:00:00 |  MA   |   14  |
|   218402     | 08-AUG-18 00:00:00 | 27-DEC-18 00:00:00 |  MA   |   15  |
|   218402     | 08-AUG-18 00:00:00 | 27-DEC-18 00:00:00 |  MA   |   24  |
|   218782     | 18-APR-18 00:00:00 | 17-JUL-18 00:00:00 |  MA   |   44  |
|   218782     | 18-APR-18 00:00:00 | 17-JUL-18 00:00:00 |  MA   |   54  |

我正在使用Oracle DB。在旧记录的结束日期和新记录的开始日期之间没有固定的时间间隔。 我想查看基于当前PERIOD的最近旧PERIOD的记录。在上面的示例中,当前PERIOD为218413,因此结果应为:

|   218402     | 08-AUG-18 00:00:00 | 27-DEC-18 00:00:00 |  MA   |   

如果我从分组依据中删除VAL2。 如何在SQL中执行此操作?

2 个答案:

答案 0 :(得分:1)

嗯。 。 。您可以使用dense_rank()来标识该组,然后使用fetch first 1 row only(或同等标识)仅获得一行:

select t.*
from (select t.*,
             dense_rank() over (order by start_date desc) as seqnum
      from t
     ) t
where seqnum = 1
fetch first 1 row only;

答案 1 :(得分:1)

select "PERIOD" from myTable 
where "START DATE" = 
(Select Min("START DATE") from myTable where "START DATE" > 
(select min("START DATE") from myTable))