Php 选择具有相同值的两行之间的最大差异(统计)

Php 选择具有相同值的两行之间的最大差异(统计),php,mysql,sql,Php,Mysql,Sql,我有一个每天插入一些值的表,类似这样 ----------- id | count ----------- 1 | 97 2 | **97** 3 | 59 4 | 62 5 | 47 6 | 59 7 | 59 8 | **97** ----------- 我需要得到重复值之间的最大日差,也就是说,你可以看到第一个和第二个值是97,即1日差,但下一次出现97是6天后,所以我需要得到最大日差6 59的情况也是一样,最大日差为3天3-介于第3天和第6天之间。 此时

我有一个每天插入一些值的表,类似这样

-----------
id | count
-----------
1  | 97
2  | **97**
3  | 59   
4  | 62
5  | 47
6  | 59 
7  | 59 
8  | **97**   
-----------
我需要得到重复值之间的最大日差,也就是说,你可以看到第一个和第二个值是97,即1日差,但下一次出现97是6天后,所以我需要得到最大日差6

59的情况也是一样,最大日差为3天3-介于第3天和第6天之间。 此时,我正在使用php数组,如以下示例所示:

$q = " SELECT id FROM table WHERE VALUE = 97 "; 
// etc ... the array looks like this
$array = {1, 2, 8};
然后我得到了最大的差异,但我只是想知道在mysql中是否有任何方法可以做到这一点,谢谢

编辑:

//if we list only the column "count":
44  5  *97*  74  5  **97**  7  3  2  31  9  8  4  2  1  **97**  4  7  7  8  *97*
步骤1:97处于第3位置,然后处于第6位置差异=3 步骤2:97处于第6位,然后处于第16位差异=10 步骤3:97处于第16位,然后处于第21位差异=5 步骤4:最大差值=10


我必须对此抱怨,我在上午8:59发布了这个问题,我在9:00重新加载了1分钟后的页面,页面已经被否决,没有时间阅读和理解这个问题,这很荒谬

select 
(`a`.`max_id` - `b`.`min_id`) as `max_day_diff`, `a`.`count`
from
(select max(id) as `max_id`, `count`
    from `table` group by `count`
) a
inner join
(select min(id) as `min_id`, `count`
 from `table` group by `count`
 ) b
 on `a`.`count` = `b`.`count`
这是小提琴:


对于只有一个计数值的行(如62、47),这将使max_day_diff为0。在您的情况下,

我认为这将为您提供所需的内容

顺便说一句,你的桌子真是太时髦了。

两种方法都有效:


我必须抱怨这一点,我在上午8:59发布了这个问题,我在9:00重新加载了1分钟后的页面,它已经被否决,没有时间阅读和理解这个问题,这很荒谬,你可能是因为你的帖子不够清晰而被否决了。正如@草莓问的,ID和你的日子一样吗?是的,这是一个变化无常的地方。@Andrew这意味着被否决了吗?问题很清楚,每天的基础意味着无论是一天还是ID,我都需要得到不同的答案,在评论之前还有两个答案,另外,草莓在别人否决我的问题30分钟后发表了评论。好吧,我会要求更多的信息,而不是否决。嘿,马克西姆斯,我试过了,但这重现了第一次和最后一次之间的差异,不是值之间的最大差异,即1 2 1 3 5 7 5 7 8 2 2 1 0 9 7 8 1-正如你所看到的,1是第一个和最后一个,但最大差异在位置3和12之间,这将是9的差异。你能用你想要的输出更新你的问题吗?更新使它比以前更混乱。我不知道你在这里找什么。如果您正在寻找的是使用PHP的工作,并且您获得了所需的输出,那么我强烈建议您使用PHP代替MySQL。为了仅使用MySQL实现此功能,您可能需要更改数据库结构,我不确定这对您来说是否可行。我再次编辑了此问题,但您可能是对的,这是一个php作业,但同样的问题,这会得到第一次和最后一次之间的差异,所以你想看看每个间隙,然后找出这些间隙的最大值?我认为在纯SQL中无法进行那种逐行处理非常好用,谢谢!我更喜欢这个,因为它没有嵌套的select
select a.blahday ad, max(b.blahday) bd, a.blahday - max(b.blahday) diff from blah a join blah b using (blahcount)
  where blahcount = 97
    and a.blahday > b.blahday
  group by ad
  order by diff desc
  limit 1
select a.blahday ab,
  (select max(blahday) from blah where blahcount = a.blahcount and blahday < a.blahday) bd
  from blah a
where blahcount = 97
order by ab - bd desc
limit 1