从mysql中的时间戳获取最近“x”个天数的记录

pgvzfuti  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(428)

尝试利用mysql的日期和时间函数。目前,我有一个表格,显示了过去5天 Postman 的路线。这些值作为时间戳存储在我的数据库中。我要这个 Postman 过去三天访问过的所有街道地址。
到目前为止,我可以执行以下查询:

"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函数下,但是没有一个函数可以完成我需要它做的事情。
有没有一个功能,我可以用来获得所有的街道地址,他访问了最近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'
8i9zcol2

8i9zcol21#

有关mysql的更好的信息源直接来自他们自己的文档。在这个列表中你会看到 DATEDIFF() 它给出了两个日期之间的天数差。

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

或者类似的东西能满足你的需要。
如果你想要正好三天到第二天,那么使用时间戳就更容易了:

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

(606024*3是三天内的秒数)
要从数据库中的最后一个时间戳开始测量三天,需要使用max()函数。从这个答案来看,我们看到了 WHERE 不允许 MAX() (子查询除外,但 HAVING 将:

... HAVING DATEDIFF(MAX(RouteStartTime), RoutStartTime) <= 3
``` `HAVING` 应该用于聚合函数,但适用于 `MAX()` 没有一个 `GROUP BY` 条款。

相关问题