首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL如何按最新时间戳进行选择?

MySQL如何按最新时间戳进行选择?
EN

Stack Overflow用户
提问于 2017-12-29 08:44:54
回答 4查看 0关注 0票数 0

我已经看到了一些类似的问题,但是,我还没有找到解决我的具体问题的办法。

我有一张基本的表:

代码语言:javascript
复制
`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

所以,我想要做的是:

代码语言:javascript
复制
 1) Select the "newest" row, based on timestamp AND 
 2) Select the 'user_2' column when given a value.  

我试过这样的方法:

代码语言:javascript
复制
 SELECT *
 FROM my_table
 WHERE user_2 = 22
 AND timestamp = (
 SELECT MAX( timestamp )
 FROM my_table )
 LIMIT 1 

但这并不返回我正在寻找的行。任何帮助修复这个查询将是很好的。

非常感谢。

EN

回答 4

Stack Overflow用户

发布于 2017-12-29 15:35:29

代码语言:javascript
复制
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

编辑:

顺便说一句,如果您想知道您的原始查询为什么不起作用,那么让我们详细分析一下以下几个部分:

  • select some stuff from my_table...
  • user_2=22
  • and timestamp=
  • limit 1

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

代码语言:javascript
复制
SELECT MAX( timestamp ) FROM my_table

注意,此子查询不限制任何基于user_2-它要求最大时间戳是多少?在整张桌子上.最大时间戳是上表中的二:(user[医]1=23,用户[医]2=25,时间戳=2012-08-10 22:00:00)。

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

  • select some stuff from my_table...
  • where user_2 = 22
  • and timestamp = 2012-08-10 22:00:00
  • limit 1

...你可以看到这里没有这样的一排.

票数 0
EN

Stack Overflow用户

发布于 2017-12-29 16:17:33

如果有人在SQL Server中有类似的问题,这将适用于你:

代码语言:javascript
复制
SELECT * FROM my_table 
WHERE    timestamp =  ( SELECT MAX( timestamp ) FROM my_table 
                        WHERE user_2 = 22 )
票数 0
EN

Stack Overflow用户

发布于 2017-12-29 16:49:05

另一种方法是GROUP BYuser_2列你计算MAX(timestamp)。这样做将不会MAX(timestamp)计算整个表中的最新日期,而是计算具有相同值的每组记录的最新时间戳user_2

所以,例如,你的查询可能是:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档