我在SO上看到过一些类似的问题,但是,我还没有找到解决我的具体问题的方法。(仅供参考,这些不是我真实的的专栏,只是一个简短的例子)。
我有一个基本的表my_table
:
| 用户_2|时间戳|注解(不是表格的一部分)| note(not part of table) |
| --|--|--| ------------ |
| 二十五|2012-08-10 22:00:00|||
| 二十二|2012-08-10 19:00:00| <===我想返回此行| <=== I would like to return this row |
| 二十二|2012-08-10 17:00:00|||
| 十七个|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
型
但这并没有返回我正在寻找的行。任何帮助修复此查询将是伟大的。
非常感谢。
5条答案
按热度按时间bksxznpy1#
字符串
顺便说一下,如果你好奇为什么你的原始查询不起作用,让我们分解一下:
my_table
中选择一些东西...user_2
= 22timestamp
= (某个值,我们先把它放在一边)现在,回到
timestamp
值,它来自子查询:型
请注意,这个子查询并不限制任何基于
user_2
的行--它询问整个表 * 中的最大时间戳 * 是多少。最大时间戳是上表中的第一个:(user_1 = 23,user_2 = 25,timestamp = 2012-08-10 22:00:00)。因此,让我们将其插回顶级查询:
my_table
中选择一些东西...*2012-08-10 22:00:00
你可以看到没有这样的争吵。
ryevplcw2#
如果有人在SQL Server中遇到类似的问题,这将对你有效(上一篇文章中建议的MySQL查询在SQL Server中不起作用):
字符串
6mw9ycah3#
另一种方法是在计算
MAX(timestamp)
时GROUP BY
user_2
列。这样做将使MAX(timestamp)
计算的不是整个表中的最新日期,而是每个具有相同user_2
值的记录组的最新时间戳。例如,您的查询可以是:
字符串
这个查询改编自我在this excellent answer中找到的答案。
smdncfj34#
这是我的全部。
字符串
当你查询它的时候代码会是
型
wn9m85ua5#
以下是我找到的解决这个问题的方法:
字符串
如果您想查看每个唯一用户的最新时间戳,只需删除
WHERE user_2 = 22
即可。