尝试利用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'
答案 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
子句。