我有一张表xxtab
,其数据为
NAME | DATE_FROM | DATE_TO
---------------------------------
Rahul | 12/14/2015 | 12/18/2015
Rahul | 12/20/2015 | 12/21/2015
Divya | 12/29/2015 | 12/30/2015
Rahul | 12/22/2015 | 12/24/2015
现在我需要一个列Status
,根据输入日期范围输出为'Booked'
或'Not Booked'
。现在,如果对于特定的人,输入DATE_FROM
和date_to属于表格中的日期范围,那么它应该将状态输出显示为“已预订”
假设我将输入作为
Date_from = '15-Dec-2015'
Date_to = '19-Dec-2015'
然后我期待这个结果:
NAME | STATUS
--------------------
Rahul | Booked
Divya | Not Booked
即一个唯一名称,我只需要一条记录。
我尝试使用此查询:
select name,
CASE
WHEN (to_char('15-Dec-2015') between Date_from and Date_to
OR to_char('19-Dec-2015') between Date_from and Date_to)
THEN 'Booked'
ELSE 'Not Booked'
END Status
from xxtab;
但是我为同一个人获得了多条记录。
NAME | STATUS
--------------------
Rahul | Booked
Rahul | Not Booked
Divya | Not Booked
Rahul | Not Booked
请帮帮我。
答案 0 :(得分:0)
select distinct(name), CASE
WHEN (to_char('15-Dec-2015') between Date_from and Date_to
OR to_char('19-Dec-2015') between Date_from and Date_to)
THEN 'Booked'
ELSE 'Not Booked'
END Status from demo1 ;
你可以试试这个。如果特定名称的状态输出是唯一的,它将检索唯一记录
答案 1 :(得分:0)
只需将MIN添加为'Booked'< '未预订':
select name,
MIN(CASE
WHEN DATE '2015-12-15' <= date_to
AND DATE '2015-12-19' >= date_from
THEN 'Booked'
ELSE 'Not Booked'
END) Status
from xxtab
group by name
我更改了您的重叠逻辑(当您请求的范围是从13.12到31.12时,它会全部报告为“未预订”。)