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 を取得したい
期待される結果を示してください。
– Vボカ
2020 年 9 月 3 日 11:47
FROM と TO は両方とも予約語 (en.wikipedia.org/wiki/SQL_reserved_words) です。つまり、これらの識別子にはd は「FROM」で区切ります。と「TO」。
– ジャール
2020 年 9 月 3 日 11:48
------------------------
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 ステートメントを使用して実現できます。
クエリ
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;
結果
PPT_FROM | PPT_TO
-----------------
15 | 40