我有一个既有当前记录又有以前记录的表:
| 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中执行此操作?
答案 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))