我在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
但这不会返回我要查找的行。修复此查询的任何帮助都将非常有用。
非常感谢。
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
timestamp
现在,回到该timestamp值,它来自您的子查询:
SELECT MAX( timestamp ) FROM my_table
请注意,此子查询不限制基于的任何行,user_2而是询问 整个表中 的最大时间戳是多少。该最大时间戳是上表中的第一个时间戳:(用户_1 = 23,用户_2 = 25,时间戳= 2012-08-10 22:00:00)。
因此,让我们将其插入顶级查询:
…您会看到没有这样的行。