0
depth   ktim
6999.0  576.46
6999.5  892.10
7000.0   10.12
7000.5   22.07
7001.0  186.55
7001.5  577.98
7002.0  799.42
7002.5  334.15
7003.0   99.43
7003.5  111.43
7004.0   41.94

所以我有一个巨大的数据库表,上面是一个简单的例子。有没有办法让 MySQL 执行查询,它会输出具有 5 个最高相邻值的值?我需要将查询调整为 5、10、20 等。

因此,如果您将 ktim 列中的每 5 个相邻单元格相加,则最高的 5 个单元格将是 7001.0-7003.5,因为它的总 ktim 为 1997.53,并将输出以下内容:

depth   ktim
7001.0  186.55
7001.5  577.98
7002.0  799.42
7002.5  334.15
7003.0   99.43

该表按深度排序,邻接将始终根据深度计算。

4

1 回答 1

2

真正的问题是获得 5 的最大总和以及发生的位置。我似乎深度增加了 0.5 作为常规序列。如果你可以依赖这个,下面的查询会将第一个 ktim 值相加到当前值,然后返回最大值:

select t.*
from (select t.*,
             (select SUM(ktim) from t t2 where t2.depth between t.depth - 2.25 and t.depth
             ) as lastfivesum
      from t
     ) t
order by lastfivesum
limit 1

这将为您提供最后一行(7003.0在您的示例中)。如果您需要全部五个,您只需将其作为 int 加入到原始表中:

select t.*
from t join
     (select t.*
      from (select t.*,
                   (select SUM(ktim) from t t2 where t2.depth between t.depth - 2.25 and t.depth
                   ) as lastfivesum
            from t
           ) t
      order by lastfivesum
      limit 1
     ) tmax
     on t.depth bewteen tmax.depth - 2.25 and tmax.depth

我正在使用2.25而不是2仅仅为了防止浮点数出现问题。

于 2013-03-26T15:42:43.887 回答