我有一个名为'peak_data'的mysql表。我是mysql和php的新手。
这里是峰值的定义
我已经使用 strtotime()将时间数据转换为unix时间。因此,使用此值,我们可以唯一地标识每一行。
答案 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”的最大值,因为表中的最新值或第一个值可能是最大值。但是,根据您的定义,它们不会算作峰值。