2013-12-08 47 views
-1

我有mysql表称为'peak_data'。我新来的MySQL和PHP。mysql查询比较以前,当前和下一个值

这里是峰值

我已经通过使用的strtotime()转换时间数据转换成UNIX时间的定义。所以使用这个值我们可以唯一地识别每一行。

+0

这是一个功课题吗?你在找SQL还是数学? – Zarathuztra

+0

可以比较一下使用mysql做bu吗?这不是家庭作业。从报纸得到想法。 – 9pixle

+0

啊,那么这超出了我对SQL和MySQL的知识,所以请回答下面的答案:) – Zarathuztra

回答

1

挑战是获取“y”的下一个和前一个值(或任何值列被调用)。您可以仅使用相关子查询在SQL中执行此操作。

一旦你有了这些值,你可以使用聚合再算上峰的数目和最大峰值:

select sum(nexty < y and prevy < y) as NumPeaks, 
     max(case when nexty < y and prevy < y then y end) as MaxPeak 
from (select pd.*, 
      (select y 
       from peak_data pd1 
       where pd1.time < pd.time 
       order by pd1.time desc 
       limit 1 
      ) prevy, 
      (select y 
       from peak_data pd1 
       where pd1.time > pd.time 
       order by pd1.time asc 
       limit 1 
      ) nexty 
     from peak_data pd 
    ) pd; 

注意,最大峰值不一定是“Y”的最大值,因为表中最新的或第一个值可能是最大值。但是,他们并不是按照你的定义算作高峰。

相关问题