0

我在 MySQL 表中有一个列,其行值之间的间隔几乎相等(类型是日期时间)。在某些时候,这个间隔变得小得多,并且一直很小,直到表格结束。我需要获取与间隔中突然跳跃相对应的单元格的值。

当然我可以下载整个东西,扫描值并检测步进变化,但是这个应用程序是基于网络的,我想避免不必要的负载。我可以通过纯粹的 MySQL 方法检测到突然发生步进变化的值吗?

例子:

# step is 1 month for some rows...
1960.01.01 00:00:00
1960.02.01 00:00:00
1960.03.01 00:00:00 <- at this point, step changes to just 1 hour
1960.03.01 01:00:00 
1960.03.01 02:00:00
1960.03.01 03:00:00

我需要一个返回值“1960.03.01 00:00:00”的查询,即步进突然改变的点。

提前致谢, 阿斯卡

4

1 回答 1

0

您可以尝试以下方法:

select *
from (select t.*,
             (select MIN(t.dt) from t t2 where t2.dt > t.dt
             ) as nexttime,
             (select MAX(t.dt) from t t2 where t2.dt < t.dt
             ) as prevtime
      from t
     ) t
where to_seconds(t.dt) - to_seconds(t.prevtime) <> to_seconds(t.nexttime) - to_seconds(t.dt)

子查询使用相关子查询计算 ( ) 之前的最大时间和 ( prevtime) 之后的第一次时间nexttime。然后它检查前一次和下一次之间每一行的时间差。当差异(以秒为单位)不同时,选择该行。

如果您在列上有索引datetime,它应该表现良好。

于 2013-04-02T21:04:49.880 回答