table (sysdate) 中特定列的动态开始日期
Dynamic start date from specific column in a table (sysdate)
我是这个领域的新手,正在慢慢学习所以请耐心等待我:)
我的数据库包含一个名为 t_usage_interval 的 table。在这个 table 中有一个列名 ID_Interval。每个月都会在此列中创建一个新的随机 10 位数字。
This is the query I am using
我想知道是否有办法通过使用带有 SYSDATE 选项的列名 DT_START 来提取最新的时间间隔?我想这将是来自 sysdate 的动态查询搜索以显示最新的 ID_Interval?
谢谢,
A
我是这样理解这个问题的。
一个直接查询returns行,其dt_start
是table中第一个小于或等于sysdate(如果您不关心时间分量,您也可以使用 trunc(sysdate)
)。此查询的缺点是它扫描 t_usage_Interval
table 两次。
select *
from t_usage_interval a
where a.dt_start = (select max(b.dt_start)
from t_usage_interval b
where b.dt_start <= sysdate
);
不太直观选项是按dt_start
对行(dt_start
低于sysdate)进行“排名”,然后return 排名“最高”的行。此选项仅扫描 table 一次,因此性能应该更好。
with temp as
(select a.*,
rank() over (order by a.dt_start desc) rn
from t_usage_interval a
where a.dt_start <= sysdate
)
select t.*
from temp t
where t.rn = 1;
我是这个领域的新手,正在慢慢学习所以请耐心等待我:)
我的数据库包含一个名为 t_usage_interval 的 table。在这个 table 中有一个列名 ID_Interval。每个月都会在此列中创建一个新的随机 10 位数字。
This is the query I am using
我想知道是否有办法通过使用带有 SYSDATE 选项的列名 DT_START 来提取最新的时间间隔?我想这将是来自 sysdate 的动态查询搜索以显示最新的 ID_Interval?
谢谢, A
我是这样理解这个问题的。
一个直接查询returns行,其dt_start
是table中第一个小于或等于sysdate(如果您不关心时间分量,您也可以使用 trunc(sysdate)
)。此查询的缺点是它扫描 t_usage_Interval
table 两次。
select *
from t_usage_interval a
where a.dt_start = (select max(b.dt_start)
from t_usage_interval b
where b.dt_start <= sysdate
);
不太直观选项是按dt_start
对行(dt_start
低于sysdate)进行“排名”,然后return 排名“最高”的行。此选项仅扫描 table 一次,因此性能应该更好。
with temp as
(select a.*,
rank() over (order by a.dt_start desc) rn
from t_usage_interval a
where a.dt_start <= sysdate
)
select t.*
from temp t
where t.rn = 1;