如何在sql server的两个表内循环查找日期范围

本文关键字:两个 循环 查找 范围 日期 sql server | 更新日期: 2023-09-27 18:13:06

请,谁能给我任何想法如何获得所有日期单独在另一个表的日期范围内。

如何做'不包括18和19'也:我如何重写存储过程,使其不计入预订表状态'已占用'的可用中间日期(18,19)。

我在预订表中有日期范围:

CheckInDate (07/16/2014 12:00:00 AM)
CheckOutDate (07/20/2014 13:00:00 PM)
RoomNumber     CheckInDate                CheckOutDate               Status
   204         07/16/2014 12:00:00 AM     07/20/2014 13:00:00 PM     Occupied  

但是在我的AvailableTest表中,没有日期范围。所有的记录都在消失个人约会。但是在预订表中,他们没有单独的日期。它们具有范围,以及如何将该日期范围与AvailableTest表中的个人日期相匹配。

RoomNumber     CheckInDate                CheckOutDate               Status
   204         07/16/2014 12:00:00 AM     07/16/2014 13:00:00 PM     Available
   204         07/17/2014 12:00:00 AM     07/17/2014 13:00:00 PM     Available
   204         07/18/2014 12:00:00 AM     07/18/2014 13:00:00 PM     Available
   204         07/19/2014 12:00:00 AM     07/19/2014 13:00:00 PM     Available
   204         07/20/2014 12:00:00 AM     07/20/2014 13:00:00 PM     Available

如果有人检查了2014年7月18日至2014年7月24日范围内的可用房间

   204         07/18/2014 12:00:00 AM     07/18/2014 13:00:00 PM     Available
   204         07/19/2014 12:00:00 AM     07/19/2014 13:00:00 PM     Available
   204         07/20/2014 12:00:00 AM     07/20/2014 13:00:00 PM     Available

应该不再可用了,但当我试图查询时,他们只取出

   204         07/20/2014 12:00:00 AM     07/20/2014 13:00:00 PM     Available

和18和19仍然是可用的。

看起来他们只知道并试图匹配checkindatecheckoutdate只有这样,他们才会在18到24的日期范围内检查16和20(检查可用)。他们不知道18号和19号也有人。

这是我的查询

select distinct (at.RoomNumber), at.RoomID, '', '', '', '', '', '', at.CheckInDate, at.CheckOutDate
from AvailableTest at                       
   join Room r on r.RoomID = at.RoomID 
   join Reservations res on res.RoomID =r.RoomID where 
   ((at.CheckInDate between '07/18/2014 13:00:00 PM' and '07/24/2014 12:00:00 AM')
        or (at.CheckOutDate between '07/18/2014 13:00:00 PM' and '07/24/2014 12:00:00 AM'))
        and at.CheckOutDate not in ( SELECT CheckOutDate  
    FROM reservations rs WHERE ((CheckInDate BETWEEN '07/18/2014 13:00:00 PM' AND '07/24/2014 12:00:00 AM') OR (CheckOutDate BETWEEN '07/18/2014 13:00:00 PM' AND '07/24/2014 12:00:00 AM')) ) and at.CheckInDate  not in ( SELECT  CheckInDate FROM reservations rs WHERE ((at.CheckInDate BETWEEN '07/18/2014 13:00:00 PM' AND  '07/24/2014 12:00:00 AM') OR (at.CheckOutDate BETWEEN '07/18/2014 13:00:00 PM' AND '07/24/2014  12:00:00 AM')) )'

如何在sql server的两个表内循环查找日期范围

我认为您希望只从AvailableTest表中获取reservation表中没有行的日期。

SELECT DISTINCT
    r.RoomNumber,
    at.RoomID ,
    '' ,
    '' ,
    '' ,
    '' ,
    '' ,
    '' ,
    at.CheckInDate ,
    at.CheckOutDate
FROM    AvailableTest at
    INNER JOIN Room r
        ON r.RoomID = at.RoomID
    INNER JOIN Reservations res
        ON res.RoomID = r.RoomID
WHERE at.CheckInDate NOT BETWEEN res.CheckInDate AND res.CheckOutDate

你的可用测试表有一些设计问题。看起来您有一个签入/结帐列,尽管只有一个日期的行。只是增加了不必要的复杂性。