当前位置: 首页 > 面试题库 >

MySQL按最新时间戳选择

沈华晖
2023-03-14
问题内容

我在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= 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

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



 类似资料:
  • 问题内容: 对于某些Hibernate实体,我们需要存储其创建时间和上次更新时间。你将如何设计? 你将在数据库中使用什么数据类型(假设使用MySQL,可能与JVM时区不同)?数据类型是否支持时区? 你会在Java中使用什么数据类型(Date,Calendar,long,…)? 你将由谁负责设置时间戳(数据库,ORM框架(hibernate)或应用程序程序员)? 你将使用哪些注释进行映射(例如@Te

  • 问题内容: 我在玩JPA(具体来说是Eclipselink)。下面的实体具有一个时间戳,应该在该实体上次更新时反映该时间戳。 每次更改此实体时,使JPA自动更新该时间戳的策略是什么? 如果我还想要一个“创建”时间戳记,该时间戳记仅在实体首次保留时设置,而永远不允许再次更改,该怎么办? 问题答案: 使用@PrePersist和@PreUpdate批注并编写您自己的事件侦听器。 详细了解一下此答案。它

  • 问题内容: 我在这里看到了类似的问题,但是没有一个问题帮助我解决了这个问题。 我有一个表可以说测试(使用mysql MyISAM) 测试具有以下架构: 现在,当前登录的用户每次访问测试页时,都会向该表添加记录,以记录访问过的用户ID,并且每次使用TID自动访问的用户访问的一些数据以及日期和时间。 然后我有一个后端管理页面,在这里我可以看到哪个用户访问了测试页面,多少次,数据以及何时。基本上,它是一

  • 问题内容: 如何从MongoDB集合中的时间(HH:MM:SS.Milisecond)值大于零的日期字段中选择记录,并通过保持日期的时间(HH:MM:SS)值为零来更新记录值是否与Python脚本中的现有值相同? 当前数据如下所示- 如何在Python脚本中仅选择第4、5、6和7行,并使用时间戳将其更新为零? 更新后,数据如下所示- 问题答案: 最好的方式来更新您的文件,并在时间使用日期时间模块,

  • 问题内容: 我有一张表: 我需要选择具有最大更新值的id和val。因此,对于此表,结果应为: 问题答案: 这需要在与主表连接的子查询中进行汇总。

  • 问题内容: 我有一个名为列是一个。因此,例如,平均外观值可能是:。我希望能够搜索并返回一天中特定时间的所有结果,而不考虑日期。 例如,如果我在列中搜索值,它将返回: 有什么想法吗? 问题答案: 您可以使用HOUR()函数: las,一旦您查询了几千行,该查询的性能将非常 糟糕 -函数不可索引,因此每次运行此查询时都会进行全表扫描。 在类似情况下的操作:创建了另一列,对其进行了索引,并在插入时填充了