MySQL запрос, который найдет все записи с указанием даты и времени в течение последнего часа месяца - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь получить все записи в базе данных MySQL, где значение столбца datetime находится в пределах последнего часа любого месяца (то есть 31 января 23: 00-23: 59, 28 февраля 23: 00-23: 59) и т. д.

Можно ли написать запрос, не написав кучу операторов "BETWEEN"?

Предположим, у меня есть следующая таблица:

id | createtime 
-------------------------
 1 | 2018-01-30 23:37:11
 2 | 2018-01-31 22:00:00
 3 | 2018-01-31 23:37:11
 4 | 2018-02-28 22:00:00
 5 | 2018-02-28 23:33:00

Iхочу запрос, который бы выбирал строки 3 и 5 (последний час января и февраля соответственно).

1 Ответ

0 голосов
/ 14 сентября 2018

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

Вы можете проверить это с помощью этой простой строки:

SET @mytime = "2018-09-30 22:59:59"; 
SELECT 
  @mytime, 
  LAST_DAY(@mytime), 
  HOUR(@mytime), 
  DAY(@mytime), 
  DAY(LAST_DAY(@mytime)), 
  IF(DAY(LAST_DAY(@mytime)) = DAY(@mytime) AND HOUR(@mytime) = 23, 1, 0) AS is_final_hour
;

Просто поиграйте с переменной datetime, которая установлена ​​в начале, чтобы увидеть разные результаты.

После этого вы можете использовать ее в запросе, например:

SELECT
  t.mydatetime,
  IF(DAY(LAST_DAY(t.mydatetime)) = DAY(t.mydatetime) AND HOUR(t.mydatetime) = 23, 1, 0) AS is_final_hour
FROM
  mytable AS t
HAVING
  is_final_hour = 1
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...