2016-08-22 86 views
1

我有两个日期,比如说2-Mar-1622-Aug-16,我想确定在这段时间内发生了多少次日期25。我怎样才能创建这样的查询?如何在一段时间内发生特定日期

+1

关键是根据具有该日期的列进行“group by”。然后你可以得到具有特定值的“事件数”。当你通过日期栏进行组合时,你应该适当地处理时间部分 - 即认为它是现实的,或者将所有日期的相同时间(12.00.00)等转换成 – ArunGeorge

+0

它是单行数据。例如:在2016年3月2日到16日22日期间发生25次5次 –

+0

显示表格式和样品数据。 –

回答

0

使用MONTHS_BETWEEN可以获得两个日期之间的整个月份数。如果这个值是一个整数,就像在你的例子中那样,那么你需要检查左边和右边日期中的给定日期是否为25.如果是,则将结果加1。

如果日期不同,则需要计算出MONTHS_BETWEEN的楼层,并检查左边和右边的日期之间是否有第25个。例如,在3月23日至4月26日之间,我们通过全月搜索找到了第25位,但自从我们找到第25位后,我们需要添加一位。

此答案假设您已经通过了较早的日期。如果这不准确,那么你必须知道MONTHS_BETWEEN的结果是否定的,你需要相应地调整这里描述的想法。

1

以下查询将为您提供日期范围内出现25次的次数。 我写过内嵌的逻辑。

select substr(DAT,1,2) numbr,count (substr(DAT,1,2)) --- Filtering only day part of date and counting it 
from 
(
--Generating all the dates between 2 dates 
select to_date('02-Mar-2016','dd-mm-yyyy') + LEVEL DAT  
from dual 
connect by level < (select ABS (to_date('02-Mar-2016','dd-mm-yyyy') - to_date('22-Aug-2016','dd-mm-yyyy')) 
        from dual) 
) 
where substr(DAT,1,2) = 25 
group by substr(DAT,1,2); 
相关问题