SELECT corooms.roomid, @DateTimeBegin, @DateTimeEnd FROM dbo.coproc INNER JOIN dbo.coProcRoomGrp ON dbo.coproc.procid = dbo.coProcRoomGrp.procID INNER JOIN dbo.coRoomToGroup ON dbo.coProcRoomGrp.coRoomGrpID = dbo.coRoomToGroup.coRoomGrpID INNER JOIN dbo.corooms ON dbo.coRoomToGroup.RoomID = dbo.corooms.roomid WHERE dbo.coproc.procid = @tiProcID AND NOT EXIST ( SELECT * FROM meetings WHERE coRooms.RoomID = meetings.roomID AND meetings.beginTime BETWEEN @DateTimeBegin, @DateTimeEnd)I didn't tested it.
>DECLARE @tiProcID int >DECLARE @Gap int >DECLARE @DateTimeBegin datetime >DECLARE @DateTimeEnd datetime > >SET @tiProcID = 7141 >SET @gap = 90 >SET @DateTimeBegin = '07/01/2002 07:00' >SET @DateTimeEnd = '07/01/2002 17:00' > >SELECT m1.roomid,DATEADD(minute, 1, m1.endTime) AS OpenTimeBegin, > DATEADD(minute, @gap, m1.endTime) AS OpenTimeEnd >FROM meetings m1 >LEFT JOIN meetings m2 ON ISNULL(m2.beginTime, @DateTimeEnd) > m1.endTime > AND (m1.roomID = m2.roomID OR m2.roomID IS NULL) >WHERE DATEDIFF(minute, m1.endTime, ISNULL(m2.beginTime, @DateTimeEnd)) >= @gap+1 >and m1.begintime between @dateTimeBegin and @dateTimeEnd >AND ISNULL(m2.beginTime, @DateTimeEnd) = > ( SELECT MIN(m3.beginTime) > FROM meetings m3 > WHERE m3.beginTime >= m1.endTime AND (m3.roomID = m2.roomID OR m2.roomID IS NULL)) >and exists ( SELECT corooms.roomid >FROM dbo.coproc INNER JOIN > dbo.coProcRoomGrp ON dbo.coproc.procid = dbo.coProcRoomGrp.procID INNER JOIN > dbo.coRoomToGroup ON dbo.coProcRoomGrp.coRoomGrpID = dbo.coRoomToGroup.coRoomGrpID INNER JOIN > dbo.corooms ON dbo.coRoomToGroup.RoomID = dbo.corooms.roomid >WHERE dbo.coproc.procid = @tiProcID >and coRooms.RoomID = m1.roomID) >>