2013-03-26 16 views
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等。与最高的组合相邻值的MySQL搜索

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

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

该表按深度排序,邻接关系总是根据深度进行计算。

+0

“相邻”总是表示“不同0.5”吗? – ruakh 2013-03-26 15:38:29

+0

是的,深度的差异总是会增加0.5。 – 2013-03-26 15:39:59

回答

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只是为了防止与浮点数的问题。

+0

+1非常好的方法! – ruakh 2013-03-26 15:47:49

+0

谢谢,这是完美的 – 2013-03-26 18:45:36

+0

我确实有2个问题出现了。 1)SQL输出一个包含2列相同行的表。当我输出我的代码时,第二组列被输出,所以所有的值都是相同的,我怎样才能得到第一组相差0.5的列。 [查看SQL输出在这里。](http://hf.shawndibble.com/10.html) 2)数据库有几千行,但如果我的值太高(例如25行),我只得到1输出。 [请看这里的SQL输出。](http://hf.shawndibble.com/25.htm) – 2013-04-15 23:22:16