Получение записей за последние 'X' количество дней из меток времени в MySQL

0

Попытка использовать функции даты и времени MySQL. В настоящее время у меня есть таблица, которая показывает маршруты mailman за последние 5 дней. Эти значения сохраняются как отметка времени в моей базе данных. Я хочу, чтобы все Уличные адреса, которые этот почтовый менеджер посещал за последние 3 дня.

До сих пор я могу сделать следующий запрос:

 "SELECT RouteEndTime
  FROM Mailman GROUP BY RouteEndTime
  HAVING DATEDIFF(MAX(RouteEndTime), RouteEndTime) <= 3;"

но я возвращаю только все значения RouteEnd для всех 15 строк

Я просматриваю этот список ресурсов:

https://www.w3schools.com/sql/sql_ref_mysql.asp

В MySQL Date Functions, но нет функции, которая делает то, что мне нужно.

Есть ли функция, которую я могу использовать для получения всех адресов, которые он посетил в последние 3 дня (начиная с самой последней даты в моем db). Ответ, который я ищу, - это, по сути, все названия уличных адресов с 5 января, 4-й и 3-й.

MailManID  | Street Address |  RouteStartTime        |  RouteEndTime

54         |  'Apple St'    |  '2018-01-05 09:00:00' | '2018-01-05 09:05:00'
54         |  'Bat St'      |  '2018-01-05 09:30:00' | '2018-01-05 09:35:00'
54         |  'Cat St'      |  '2018-01-05 09:45:00' | '2018-01-05 09:50:00'

54         |  'Kite St'     |  '2018-01-04 09:00:00' | '2018-01-04 09:05:00'
54         |  'Lemon St'    |  '2018-01-04 09:30:00' | '2018-01-04 09:35:00'
54         |  'Muppet St'   |  '2018-01-04 09:45:00' | '2018-01-04 09:50:00'

54         |  'Luke St'     |  '2018-01-03 09:00:00' | '2018-01-03 09:05:00'
54         |  'Ben St'      |  '2018-01-03 09:30:00' | '2018-01-03 09:35:00'
54         |  'Cow St'      |  '2018-01-03 09:45:00' | '2018-01-03 09:50:00'

54         |  'Hello St'    |  '2018-01-02 09:00:00' | '2018-01-02 09:05:00'
54         |  'Igloo St'    |  '2018-01-02 09:30:00' | '2018-01-02 09:35:00'
54         |  'Jump St'     |  '2018-01-02 09:45:00' | '2018-01-02 09:50:00'

54         |  'Yellow St'   |  '2018-01-01 09:00:00' | '2018-01-01 09:05:00'
54         |  'Blue St'     |  '2018-01-01 09:30:00' | '2018-01-01 09:35:00'
54         |  'Red St'      |  '2018-01-01 09:45:00' | '2018-01-01 09:50:00'

Я хочу вернуть что-то вроде:

'Apple St' '2018-01-05 09:00:00' '2018-01-05 09:05:00'
'Bat St' '2018-01-05 09:30:00' '2018-01-05 09:35:00'
'Cat St''2018-01-05 09:45:00' '2018-01-05 09:50:00'
'Kite St''2018-01-04 09:00:00' '2018-01-04 09:05:00'
'Lemon St''2018-01-04 09:30:00' '2018-01-04 09:35:00'
'Muppet St''2018-01-04 09:45:00' '2018-01-04 09:50:00'
'Luke St''2018-01-03 09:00:00' '2018-01-03 09:05:00'
'Ben St''2018-01-03 09:30:00' '2018-01-03 09:35:00'
'Cow St''2018-01-03 09:45:00' '2018-01-03 09:50:00'
Теги:
database
datetime

1 ответ

2

Лучший источник информации о MySQL прямо из их собственной документации. В этом списке вы увидите DATEDIFF() который дает разницу в днях между двумя датами.

... WHERE DATEDIFF(NOW(), RouteStartTime) <= 3

или что-то в этом роде даст вам то, что вам нужно.

Если вы хотите ровно три дня на секунду, проще просто использовать отметки времени:

... WHERE (CURRENT_TIMESTAMP() - 60*60*24*3) > UNIX_TIMESTAMP(RouteStartTime)

(60 * 60 * 24 * 3 - количество секунд в три дня)

Чтобы измерить ваши три дня с последней временной отметки в базе данных, вам нужно использовать функцию MAX(). Выбирая этот ответ, мы видим, что WHERE не разрешит MAX() (кроме как в подзапросе, но HAVING будет:

... HAVING DATEDIFF(MAX(RouteStartTime), RoutStartTime) <= 3

Предполагается, что HAVING для агрегатных функций, но работает для MAX() без предложения GROUP BY.

  • 0
    Спасибо @Jerry - теперь я понимаю функцию DATEDIFF лучше, но что, если я хотел бы получить последние 3 дня с последнего дня в наборе данных? Таким образом, это будут последние 3 дня, начиная с самой последней даты?
  • 1
    Это сложнее. Вместо NOW () вам нужно использовать статистическую функцию MAX () для столбца, для которой требуется подзапрос. К счастью, легкий. Я обновлю ответ.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню