У меня есть стол с id, user_id, start_date_time, end_date_time

User_id имеет много записей. Мне нужно найти время между Start_date_time и End_date_time нескольких записей из user_id. Пример

1,28,2019-11-16 18:00:00, 2019-11-16 20:00:00
2,28,2019-11-17 22:00:00, 2019-11-17 23:10:00
3,28,2019-11-17 23:00:00, 2019-11-17 23:15:00

Если я выполняю поиск в любой момент времени, мне нужен вывод всех записей, превышающих данное время.

Поэтому, если мне нужна запись выше 2019-11-17 22:15:00, мне нужен вывод 2 записей.

Можете ли вы помочь мне на примере.

0
Stephen Paulraj 16 Ноя 2019 в 20:25
Являются ли эти времена фактическими столбцами или строками TIMESTAMP или DATETIME?
 – 
Daniel Farrell
16 Ноя 2019 в 20:28
Это ДАТА ВРЕМЯ
 – 
Stephen Paulraj
16 Ноя 2019 в 20:29

2 ответа

Это то, что вы хотите?

select t.*
from t
where t.end_date_time > ?;

? - это параметр-заполнитель для значения, которое вы передаете.

1
Gordon Linoff 16 Ноя 2019 в 20:27
Но проблема в том, что у меня есть диапазон дат и времени для каждой записи start_date_time - end_date_time, если я использую указанное выше, он дает все даты, которые он не проверяет.
 – 
Stephen Paulraj
16 Ноя 2019 в 20:32
Вашему вопросу не хватает ясности, в нем говорится: «Если я буду искать в любой момент времени, мне потребуется вывод всех записей, превышающих данное время». (Ответил Гордон), но также сказал: «Мне нужно найти время между Start_date_time и End_date_time»
 – 
Daniel Farrell
16 Ноя 2019 в 20:36
- У меня есть 3 записи для user_id в диапазоне DATETIME. 1,28,2019-11-16 18:00:00, 2019-11-16 20:00:00 2,28,2019-11-17 22:00:00, 2019-11-17 23:10:00 3,28,2019-11-17 23:00:00, 2019-11-17 23:15:00 Мне нужно записаться на прием для пользователя с идентификатором 28 на 28,2019-11-17 22:35:00 - мне нужны все записи от 28,2019-11-17 22:00:00 до 2019-11-17 23:15:00, т.е. 2 записи
 – 
Stephen Paulraj
16 Ноя 2019 в 20:39

Если вам нужен инклюзивный диапазон, вы можете использовать BETWEEN:

select * from times 
 WHERE cast('2019-11-17 22:15:00' as datetime) 
       between `start_date_time` and `end_date_time`;

Если вы не хотите включать время начала и окончания в диапазон, вы можете использовать два сравнения > и <:

select * from times 
 where cast('2019-11-17 22:15:00' as datetime) > start_date_time 
 AND   cast('2019-11-17 22:15:00' as datetime) < end_date_time;

Поэтому, если мне нужна запись выше 2019-11-17 22:15:00, мне нужен вывод 2 записей.

Только одна строка соответствует дате, которую вы указали, чего бы она ни стоила; №2.

https://www.db-fiddle.com/f/bPk1CYioL6cVasStZKzQ4j/2

0
Daniel Farrell 16 Ноя 2019 в 20:40
Дэниел, спасибо за вашу помощь, пожалуйста, загляните еще раз в [ссылку] db-fiddle.com/f / bPk1CYioL6cVasStZKzQ4j / ​​6 запрос №2 возвращает безрезультатно. А запрос №1 возвращает только один результат вместо нескольких между записями.
 – 
Stephen Paulraj
16 Ноя 2019 в 20:54
@StephenPaulraj, это потому, что ни одна строка не соответствует вашему предложению WHERE, where cast('2019-11-17 23:12:00' as datetime) > start_date_time AND cast('2019-11-17 23:59:00' as datetime) < end_date_time;. Обратите внимание, что у вас есть 2 разных времени.
 – 
Daniel Farrell
16 Ноя 2019 в 20:57
Мой вопрос в том, что у меня есть несколько диапазонов времени для каждой записи в одну и ту же дату. проблема заключается в просмотре всех диапазонов записей. на идентификаторе скрипки 3,4,5 есть та же дата с другим диапазоном времени. Что делать, если мне нужны все записи больше, чем 2019-11-17 23:01:00
 – 
Stephen Paulraj
16 Ноя 2019 в 21:02
Я думаю, вам следует написать новый пост с вашим настоящим вопросом, если это не так.
 – 
Daniel Farrell
16 Ноя 2019 в 21:05