Получить данные из базы данных за промежуток времени между двумя датами - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть таблица HTML, где я показываю записи, полученные в реальном времени с устройств.

Я хочу разрешить пользователям получать данные за промежуток времени между двумя датами, например, извлекать все данные между '2019-09-20' и '2019-09-25' ночью (с 22:00:00 до 06:00:00 следующего дня), где все данные хранятся в UTC.

Я могу заставить их работать с 06:00:00 UTC до 08:00:00UTC получает много результатов, но не для этого запроса (22:12:00 UTC до 08:00:00 UTC).

Этот запрос возвращает результаты:

SELECT d0_.id AS id_0
     , d0_.uuid AS uuid_1
     , d0_.datetime_utc AS datetime_utc_2
     , d0_.macaddress AS macaddress_3 
     , d0_.channel_name AS channel_name_5
     , d0_.device_id AS device_id_42
     , d0_.country_id AS country_id_43 
  FROM detection d0_ 
  JOIN device d4_ 
    ON d0_.device_id = d4_.id 
  JOIN country c7_ 
    ON d0_.country_id = c7_.id 
 WHERE (DATE(d0_.datetime_utc) BETWEEN '2019-09-20' AND '2019-09-25')
   AND (TIME(d0_.datetime_utc) BETWEEN '06:00:00' AND '08:00:00') 
 ORDER 
    BY d0_.datetime_utc ASC;

Это результатжурнал возвращен на MySQL Workbench:

1000 row(s) returned

Теперь, если я выполню запрос, чтобы получить результаты между тем же интервалом дат и между (22:00:00 UTC) и (08:00:00 UTC):

SELECT d0_.id AS id_0, d0_.uuid AS uuid_1, d0_.datetime_utc AS datetime_utc_2, d0_.macaddress AS macaddress_3, d0_.channel_name AS channel_name_5, d0_.device_id AS device_id_42, d0_.country_id AS country_id_43 
FROM detection d0_ 
INNER JOIN device d4_ ON d0_.device_id = d4_.id 
INNER JOIN country c7_ ON d0_.country_id = c7_.id 
WHERE (DATE(d0_.datetime_utc) BETWEEN '2019-09-20' AND '2019-09-25')
AND (TIME(d0_.datetime_utc) BETWEEN '22:00:00' AND '08:00:00') 
ORDER BY d0_.datetime_utc ASC;

Запрос возвращает этот результат (хотя временной интервал больше первого):

0 row(s) returned

Я думаю, что это вызвано тем, что время начала больше, чемконечное время, но я не знаю, как ее решить.

Чтобы прояснить вопрос, запрос описывается так:

"Give me all the records received all the days at night (defined by the TIME sentence) between 2 specific dates (defined by DATE sentence)."

Спасибо,

Joaquв.

1 Ответ

1 голос
/ 26 сентября 2019

Проверьте два интервала, один с 00:00:00 до 08:00:00, а другой с 22:00:00 до 23: 59: 59.

Я не уверен, что у вас естьданные времени с разрешением более одной секунды.Если вы это сделаете, вам, возможно, придется сделать что-то вроде 23: 59: 59.999.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...