我已经看到了一些类似的问题,但是,我还没有找到解决我的具体问题的办法。
我有一张基本的表:
`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
但这并不返回我正在寻找的行。任何帮助修复这个查询将是很好的。
非常感谢。
发布于 2017-12-29 15:35:29
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
=22timestamp
=现在,回到那个timestamp
值,它来自您的子查询:
SELECT MAX( timestamp ) FROM my_table
注意,此子查询不限制任何基于user_2
-它要求最大时间戳是多少?在整张桌子上.最大时间戳是上表中的二:(user[医]1=23,用户[医]2=25,时间戳=2012-08-10 22:00:00)。
因此,让我们将其插入到顶级查询:
my_table
......你可以看到这里没有这样的一排.
发布于 2017-12-29 16:17:33
如果有人在SQL Server中有类似的问题,这将适用于你:
SELECT * FROM my_table
WHERE timestamp = ( SELECT MAX( timestamp ) FROM my_table
WHERE user_2 = 22 )
发布于 2017-12-29 16:49:05
另一种方法是GROUP BY
将user_2
列你计算MAX(timestamp)
。这样做将不会MAX(timestamp)
计算整个表中的最新日期,而是计算具有相同值的每组记录的最新时间戳user_2
。
所以,例如,你的查询可能是:
SELECT * FROM my_table
WHERE user_2 = 22
AND timestamp =
(SELECT MAX(timestamp) FROM my_table
WHERE user_2 = 22
GROUP BY user_2)
LIMIT 1;
https://stackoverflow.com/questions/-100007093
复制相似问题