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 | 我正在使用oracledb。旧记录的结束日期和新记录的开始日期之间没有固定的时间间隔。 我想查看基于当前期间的最近旧期间的记录。在上述示例中,当前期间为218413,因此结果应为: | 218402 | 08-AUG-18 00:00:00 | 27-DEC-18 00:00:00 | MA | 如果我从group by中删除VAL2。 如何在SQL中执行此操作?Hmmm。您可以使用densite_rank来标识组,然后仅获取前1行或等效行以仅获取一行:Sql 如何从当前日期获取以前的记录?,sql,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 | | 21
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;
请标记正在使用的dbms以及您的尝试。最新的旧记录?在218402期间有2条记录,我们应该选择哪一条?正如@VamsiPrabhala解释的那样,在您告诉我们您使用的是哪种dbms以及MySQL 8.0版本等之前,我们无法回答。@VamsiPrabhala我使用的是Oracle。每个句点和VAL1组合将有多个VAL2值。感谢您的回复。我想我的问题框架不对。我想查看基于当前期间的最近旧期间的记录。在上面的例子中,当前期间是218413,因此结果应该是:| 218402 | 08-AUG-18 00:00:00 | 27-DEC-18 00:00:00 | MA |如果我从group by中删除VAL2。@DebanjanB,它的作用是显而易见的,并且已经在问题本身中。
select "PERIOD" from myTable
where "START DATE" =
(Select Min("START DATE") from myTable where "START DATE" >
(select min("START DATE") from myTable))