@StasianCheg

Как сделать выборку попадающую в промежуток?

У меня есть таблица в которой находятся 5 колонок 1. bilet_id, 2. name1, 3. duration1, 4. ticket_price, 5. start_time_of_the_film? В колонке start_time_of_the_film у меня находиться время начала сеанса, в колонке duration1 у меня находиться продолжительность фильма, в колонке name1 у меня находятся названия фильмов, мне надо сделать выборку фильмов которые попадают в промежуток сеанса,то есть Алита у меня начинаеться в 10:45 значит в промежуток должно входить все фильмы которые равны start_time_of_the_film + duration1 ниже я предоставил таблицу
bilet_id    name1                            duration1     ticket_price    start_time_of_the_film
1	       Бладшот	                           120	        150,00	          11:30:00
2	       Алита:Боевой Ангел	           60	                110,00	          10:45:00
3	       Форсаж Хобс и Шоу	   120	        160,00	          17:20:00
4	       Капкан	                           90	                130,00	          13:00:00
5	       Джуманджи	                   120	        170,00	          12:50:00	
6	       Ангелы Чарли	                   60	                100,00	          10:30:00	
7	       Семейка Адамс	           120	        140,00	          15:30:00	
8	       Платформа	                   90         	120,00	          18:40:00	
9	       Мег	                                   120	        170,00	          13:30:00	
10	       Аквамен	                           120	        200,00	          16:30:00
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ответы на вопрос 1
coderisimo
@coderisimo
Общая идея.

сreate table tickets(id INT NULL,film_name VARCHAR(100) NULL, start_time DATETIME ,dur INT NULL	);

INSERT INTO tickets (id, film_name, start_time, dur)
VALUES 
  (1, 'f1', '2020-10-10 12:00:00', 60),
    (2, 'f2', '2020-10-10 11:30:00', 20),
    (3, 'f3', '2020-10-10 10:50:00', 90),
    (4, 'f4', '2020-10-10 11:10:00', 60),
    (5, 'f5', '2020-10-10 10:50:00', 120);


#-------------САМО РЕШЕНИЕ-------------------

SET @film_id := 1;  # здесь у нас ID фильма по которому проверяем интервалы
SET @startRange = (SELECT start_time FROM tickets WHERE id= @film_id)  ;
SET @endRange = (SELECT start_time + INTERVAL dur MINUTE FROM tickets WHERE id= @film_id);

select * from 
(select * , start_time + INTERVAL dur MINUTE as end_time from tickets) 
as table_with_end_time
WHERE
 (table_with_end_time.start_time >=  @startRange AND table_with_end_time.start_time  <=  @endRange)
OR(table_with_end_time.end_time >=  @startRange AND table_with_end_time.end_time  <=  @endRange )
OR(table_with_end_time.start_time <=  @startRange AND table_with_end_time.end_time >=  @endRange)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы