问题描述
with tb as(
select 1 as PPT_FROM,40 PPT_TO from dual
union
select 15 as PPT_FROM,40 PPT_TO from dual)
select * from tb
where 40 between PPT_FROM and PPT_TO;
现在输入的日期范围均为40或15,因此我想获取最大记录,即15 PPT_from和40 PPT_to
解决方法
我认为您想要order by
和fetch
:
select *
from tb
where 40 between FROM and TO
order by from desc
fetch first 1 row only;
在旧版本的Oracle(12之前的版本)中,您需要一个子查询:
select tb.*
from (select tb.*
from tb
where 40 between FROM and TO
order by from desc
) tb
where rownum = 1;
请注意,FROM
和TO
是列的非常不好的名称,因为它们是SQL关键字。
您可以使用简单的GROUP BY语句获得预期的结果
查询
library(evmix)
hillplot(claims$cost)
pickandsplot(claims$cost)
结果
WITH
tb
AS
(SELECT 1 AS PPT_FROM,40 PPT_TO FROM DUAL
UNION
SELECT 15 AS PPT_FROM,40 PPT_TO FROM DUAL)
SELECT MAX (ppt_from) AS ppt_from,ppt_to
FROM tb
WHERE 40 BETWEEN PPT_FROM AND PPT_TO
GROUP BY ppt_to;