Поиск записей в таблице с той же датой или вход в этот диапазон дат.Sql запрос - PullRequest
0 голосов
/ 13 января 2012

выучи sql и пришел следующий вопрос.Как реализовать запрос для отображения записи, которая была бы идентична в двух полях или включена в эти диапазоны: время-данные и время-конец данных.

Существует таблица:

broadcasting
rows: id, data-time, data-time-end, nameprogramm, namechannel

некоторые данные:

'1 ', '2012-01-09 13:00:00', '2012-01-09 13:30:00 ','News', 'Channel1'
'2 ', '2012-01-09 13:00:00', '2012-01-09 13:30:00 ','News', 'Channel2'
'3 ', '2012-01-09 13:05:00', '2012-01-09 13:35:00 ','News', 'Channel3'
'4 ', '2012-01-09 13:10:00', '2012-01-09 13:15:00 ','News', 'Channel4'
'5 ', '2012-01-09 11:00:00', '2012-01-09 12:00:00 ','News', 'Channel5'
'6 ', '2012-01-09 16:00:00', '2012-01-09 18:00:00 ','News', 'Channel6'

необходимо запросить:

date-time date-time-end channel

для тех записей, которые находятся в диапазоне даты-времени и даты-времени-конец.

Я думаю, вам нужно выбрать максимальное и минимальное время.Затем посмотрите, находятся ли другие записи в этом диапазоне.Но что-то, когда это получится, я это осуществлю.Спасибо!

--------------------- Добавить

Позвольте мне объяснить на примере телевизионных программ.У нас есть каналы и передачи.В какое время новости с разных каналов передаются одновременно?Сколько новостных каналов вещают одновременно?(Время начала новостей не обязательно совпадает).

результаты: Я хочу, чтобы результат был следующим:

data-time             data-time-end         namechannel
2012-01-09 13:00:00 | 2012-01-09 13:30:00 | Channel1
2012-01-09 13:05:00 | 2012-01-09 13:35:00 | Channel3
2012-01-09 13:10:00 | 2012-01-09 13:15:00 | Channel4

1 Ответ

1 голос
/ 13 января 2012

Чтобы выбрать записи, где целое диапазона дат находится между указанной датой начала и окончания, попробуйте:

select * from broadcasting 
where `date-time` >= ? /* start of date range */
  and `date-time-end` <= ? /* end of date range */

Чтобы выбрать записи, где любая часть диапазона дат находится между указанной датой начала и окончания, попробуйте:

select * from broadcasting 
where `date-time` <= ? /* end of date range */
  and `date-time-end` >= ? /* start of date range */

РЕДАКТИРОВАТЬ: выбрать записи, где любая часть их диапазона дат перекрывает любую часть диапазона дат любой другой записи для той же программыпопробуйте:

select * from broadcasting b1
where exists (select null
              from broadcasting b2
              where b1.nameprogramm = b2.nameprogramm and
                    b1.`date-time` <= b2.`date-time-end` and 
                    b2.`date-time` <= b1.`date-time-end` and
                    b1.id <> b2.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...