一尘不染

MySQL按最新时间戳选择

mysql

我在SO上看到过类似类型的问题,但是,我无法找到针对我特定问题的解决方案。(仅供参考,这些不是我的真实专栏,只是一个简短的示例)。

我有一个基本表:

`my_table`

user_1           user_2                timestamp
======================================================
  23              25              2012-08-10 22:00:00
  24              22              2012-08-10 19:00:00   <=== I would like to return this row
  24              22              2012-08-10 17:00:00
  21              17              2012-08-10 15:00:00

因此,我想做的是能够:

 1) Select the "newest" row, based on timestamp AND 
 2) Select the 'user_2' column when given a value.

我已经尝试过类似的东西:

 SELECT *
 FROM my_table
 WHERE user_2 = 22
 AND timestamp = (
 SELECT MAX( timestamp )
 FROM my_table )
 LIMIT 1

但这不会返回我要查找的行。修复此查询的任何帮助都将非常有用。

非常感谢。


阅读 276

收藏
2020-05-17

共1个答案

一尘不染

SELECT * FROM my_table -- standard stuff
   WHERE user_2 = 22 -- predicate
   ORDER BY timestamp DESC -- this means highest number (most recent) first
   LIMIT 1; -- just want the first row

编辑:

顺便说一句,如果您想知道为什么原来的查询不起作用,让我们分解一下:

  • my_table…中选择一些东西
  • 其中user_2= 22
  • timestamp= (有些值,暂时搁置)
  • 限制1

现在,回到该timestamp值,它来自您的子查询:

SELECT MAX( timestamp ) FROM my_table

请注意,此子查询不限制基于的任何行,user_2而是询问 整个表中 的最大时间戳是多少。该最大时间戳是上表中的第一个时间戳:(用户_1 =
23,用户_2 = 25,时间戳= 2012-08-10 22:00:00)。

因此,让我们将其插入顶级查询:

  • my_table…中选择一些东西
  • 其中user_2 = 22
  • 和时间戳= 2012-08-10 22:00:00
  • 限制1

…您会看到没有这样的行。

2020-05-17