MySQL选择时间戳最接近但不超过给定时间戳的行

MySQL选择时间戳最接近但不超过给定时间戳的行,第1张

概述我有一张桌子,看起来如下state_history +---------------------+-----------+----------------+ + | state_added_time | entity_id | state_id | .... | +---------------------+-----------

我有一张桌子,看起来如下

state_history+---------------------+-----------+----------------+      +| state_added_time    | entity_ID | state_ID       | .... |+---------------------+-----------+----------------+      || 2015-05-15 13:24:22 |         1 |              1 |      || 2015-05-15 13:29:44 |         3 |              2 |      || 2015-05-15 13:34:26 |         2 |              2 |      || 2015-05-15 14:24:28 |         1 |              3 |      || 2015-05-15 14:24:30 |         2 |              3 |      || 2015-05-15 14:26:32 |         3 |              5 |      || 2015-05-15 14:26:34 |         3 |              3 |      |.......

我的目的是在任何特定时间了解所有实体的状态.例如,如果从应用程序收到的时间戳是2015-05-15 14:25:00,那么预期的输出应该是:

state_history+---------------------+-----------+----------------+      +| state_added_time    | entity_ID | state_ID       | .... |+---------------------+-----------+----------------+      || 2015-05-15 14:24:28 |         1 |              3 |      || 2015-05-15 14:24:30 |         2 |              3 |      || 2015-05-15 13:29:44 |         3 |              2 |      |.......

也就是说,要知道在给定时间之前或之后每个实体发生的最后状态变化.状态变化之间的间隔不固定.因此,我不能有2个时间边界,并在它们之间找到行.

我尝试过使用TIMEDIFF但未能获得所需的输出.任何人都可以指导我走的路吗?

编辑:感谢大家的快速回复.我尝试了答案,并注意到在实际数据库上执行时,查询需要花费大量时间来获取行.可能是因为字段entity_ID和state_ID是其他两个表的外键.
现在知道这是否有任何方法可以提高查询的性能?最佳答案您也可以使用变量来完成:

SELECT entity_ID,state_added_time,state_IDFROM (  SELECT state_added_time,state_ID,@row_number:= CASE WHEN @entity = entity_ID THEN @row_number+1                             ELSE 1                        END AS row_number,@entity:=entity_ID AS entity_ID     FROM state_history  WHERE state_added_time <= '2015-05-15 14:25:00'ORDER BY entity_ID,state_added_time DESC ) tWHERE t.row_number = 1

每次遇到新的entity_ID时都会重置@row_number.在每个entity_ID中,@ row_number = 1的值指向最近的记录.

SQL Fiddle Demo 总结

以上是内存溢出为你收集整理的MySQL选择时间戳最接近但不超过给定时间戳的行全部内容,希望文章能够帮你解决MySQL选择时间戳最接近但不超过给定时间戳的行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1167309.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存