mysql查询比较以前,当前和下一个值

时间:2013-12-08 17:05:53

标签: php mysql sql

我有一个名为'peak_data'的mysql表。我是mysql和php的新手。

这里是峰值的定义

我已经使用 strtotime()将时间数据转换为unix时间。因此,使用此值,我们可以唯一地标识每一行。

1 个答案:

答案 0 :(得分: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”的最大值,因为表中的最新值或第一个值可能是最大值。但是,根据您的定义,它们不会算作峰值。