简体   繁体   中英

Oracle SQL query about Date

I have a database table named availableTimeslot with fields pk , startDate , endDate , eg

PK   startDate             endDate
1.   2017-03-07 09:00:00   2017-03-07 18:00:00
2.   2017-03-07 18:00:00   2017-03-07 21:00:00
3.   2017-03-08 09:00:00   2017-03-08 18:00:00

records starting from 09:00:00 to 18:00:00 indicate it is a morning time slot, while 18:00:00 to 23:00:00 indicating it is a afternoon time slot

storing available timeslot dates (eg 2017-03-06, 2017-03-08) which are available for the customer to choose one.

Can I use one query to get exactly 10 available time slots dates starting on the day after the order date?

eg if I order a product on 2016-03-07, then the query returns

2017-03-08 09:00:00
2017-03-08 18:00:00 
2017-03-09 09:00:00
2017-03-09 18:00:00
2017-03-10 ...
2017-03-11 ...
2017-03-13 ... 

as 12 is a public holiday and not in the table.

In short, it returns 10 dates (5 days with each day having am and pm sessions)

remark: the available time slot dates are in order, but may not be consecutive

Do you want 5 for a single customer?

select ts.*
from (select ts.*
      from customer c join
           timeslots ts
           on ts.date > c.orderdate
      where c.customerid = v_customerid
      order by ts.date asc
     ) ts
where rownum <= 5
select available_date
from   ( select available_date, row_number() over (order by available_date) as rn 
         from   your_table
         where  available_date > :order_date
       )
where  rn <= 5;

:order_date is a bind variable - the date entered by the user/customer through the interface.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM