Try something like this:
(I did this on Oracle, it should mostly work elsewhere, the WITH clauses are mostly for just faking sample data .. so not entirely necessary)
with w_date_list as ( -- just some sample input dates - these are from your IN list (note that you want to re-org them as a "table" not an IN list - there's ways of doing that if you need help with that step
select to_date('01-apr-2015','dd-mon-yyyy') cdate from dual union all
select to_date('02-apr-2015','dd-mon-yyyy') cdate from dual union all
select to_date('03-apr-2015','dd-mon-yyyy') cdate from dual union all
select to_date('04-apr-2015','dd-mon-yyyy') cdate from dual union all
select to_date('05-apr-2015','dd-mon-yyyy') cdate from dual
),
w_date_rng as ( -- re-organize them into ranges using LEAD analytic function
select cdate start_date,
nvl(lead(cdate) over (order by cdate), cdate + 1 ) end_date -- last one, just default to 1 day
from w_date_list
)
select *
from (select to_date('01-jan-2015 03:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual union all
select to_date('01-mar-2015 03:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual union all
select to_date('01-apr-2015 03:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual union all
select to_date('01-apr-2015 10:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual union all
select to_date('01-apr-2015 13:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual union all
select to_date('02-apr-2015 03:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual union all
select to_date('02-apr-2015 21:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual union all
select to_date('04-apr-2015 03:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual union all
select to_date('04-apr-2015 15:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual union all
select to_date('04-apr-2015 15:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual union all
select to_date('04-apr-2015 15:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual union all
select to_date('05-apr-2015 08:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual union all
select to_date('05-apr-2015 16:14:46','dd-mon-yyyy hh24:mi:ss') yourdate from dual
) table1 , -- this just some fake data for your "table1" table.
w_date_rng wd
where table1.yourdate between wd.start_date and wd.end_date -- join the two with range ... it'll use an index on "yourdate" if it exists
/
Results:
YOURDATE START_DATE END_DATE
-------------------- -------------------- --------------------
01-apr-2015 03:14:46 01-apr-2015 00:00:00 02-apr-2015 00:00:00
01-apr-2015 10:14:46 01-apr-2015 00:00:00 02-apr-2015 00:00:00
01-apr-2015 13:14:46 01-apr-2015 00:00:00 02-apr-2015 00:00:00
02-apr-2015 03:14:46 02-apr-2015 00:00:00 03-apr-2015 00:00:00
02-apr-2015 21:14:46 02-apr-2015 00:00:00 03-apr-2015 00:00:00
04-apr-2015 03:14:46 04-apr-2015 00:00:00 05-apr-2015 00:00:00
04-apr-2015 15:14:46 04-apr-2015 00:00:00 05-apr-2015 00:00:00
04-apr-2015 15:14:46 04-apr-2015 00:00:00 05-apr-2015 00:00:00
04-apr-2015 15:14:46 04-apr-2015 00:00:00 05-apr-2015 00:00:00
05-apr-2015 08:14:46 05-apr-2015 00:00:00 06-apr-2015 00:00:00
05-apr-2015 16:14:46 05-apr-2015 00:00:00 06-apr-2015 00:00:00
11 rows selected.
This could be "generalized" as:
select *
from table1 ,
( select cdate start_date,
nvl(lead(cdate) over (order by cdate), cdate + 1 ) end_date
from ( select to_date('01-apr-2015','dd-mon-yyyy') cdate from dual union all
select to_date('02-apr-2015','dd-mon-yyyy') cdate from dual union all
select to_date('03-apr-2015','dd-mon-yyyy') cdate from dual union all
select to_date('04-apr-2015','dd-mon-yyyy') cdate from dual union all
select to_date('05-apr-2015','dd-mon-yyyy') cdate from dual
) w_date_list
) wd
where table1.yourdate between wd.start_date and wd.end_date
/
That should work on any DB ... MYSQL, Oracle, whatever.
just need to input the date list range - it would be best to feed it in as another table or such ...
I could show how to do it Oracle but probably not terribly useful to you :) Might need another question for that if needed.