记录最后的' X' MySQL中TimeStamps的天数

时间:2018-01-09 00:54:46

标签: mysql sql database datetime unix

尝试利用MySQL日期和时间功能。目前我有一张桌子,显示过去5天的邮递员路线。这些值作为时间戳存储在我的数据库中。我想要这个邮递员在过去3天内访问过的所有街道地址。

到目前为止,我可以在查询之后执行此操作:

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

但我只返回所有15行的所有RouteEnd值

我正在查看此资源列表:

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

在MySQL Date Functions下,但是没有任何功能可以完成我需要它做的事情。

我是否有一个功能可以用来获取他最近3天内访问过的所有街道地址(从我最近的数据库中开始)我所寻找的答案基本上都是街道地址名称从1月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'

1 个答案:

答案 0 :(得分:2)

关于MySQL的更好的信息来源是straight from their own documentation.在该列表中,您将看到DATEDIFF(),它给出了两个日期之间天数的差异。

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

或类似的东西可以满足您的需求。

如果你只需要三天到第二天,那么使用时间戳会更容易:

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

(60 * 60 * 24 * 3是三天内的秒数)

要测量数据库中最后一个时间戳的三天,您需要使用MAX()函数。来自this answer的信息,我们发现WHERE不允许MAX()(除了作为子查询,但HAVING将:

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

HAVING应该用于聚合函数,但适用于MAX()而没有GROUP BY子句。