xhon Ответов: 2

Как выбрать значения в зависимости от интервала времени?


У меня есть два стола, Фильмы и ResrvationsOfMovies.
Фильмы имеют столбец DirectorName
ReservationsOfMovies содержит столбцы ReservationStartDate и ReservationEndDate.

Я хочу выбрать имя режиссера всех фильмов, не включая те фильмы, бронирование которых было активно месяц назад.

Что я уже пробовал:

DECLARE @aMonthAgo DATE = CAST(ReservationEndDate - ReservationStartDate) AS DATE)

 SELECT movies.DirectorName
 FROM Movies movies
 INNER JOIN Reservations res ON res.IDMovies = b.IDMovies
 WHERE res.ReservationStartDate > @aMontAgo  AND res.ReservationEndDate < GETDATE();

2 Ответов

Рейтинг:
10

Richard Deeming

DECLARE @Today date = GETDATE();
DECLARE @aMonthAgo date = DateAdd(month, -1, @Today);

SELECT movies.DirectorName
FROM Movies movies
INNER JOIN Reservations res ON res.IDMovies = b.IDMovies
WHERE res.ReservationStartDate > @aMonthAgo AND res.ReservationEndDate < @Today;
NB: Ваш диапазон дат может быть не совсем таким, как вы хотите. Если бронирование началось больше месяца назад, но не закончится до завтра, это не будет считаться. Возможно, вы имели в виду:
WHERE res.ReservationEndDate > @aMonthAgo AND res.ReservationStartDate < @Today;


Рейтинг:
1

RickZeeland

Забудьте о объявлении, оно не будет работать в запросе, используйте:
Функция SQL Server DATEDIFF() [^]