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

时间:2013-10-10 14:28:02

标签: php mysql sql

我有一个表格,每天都会插入一些值,就像这样

-----------
id | count
-----------
1  | 97
2  | **97**
3  | 59   
4  | 62
5  | 47
6  | 59 
7  | 59 
8  | **97**   
-----------

我需要获得重复值之间的最大日差,即,你可以看到第1和第2个值是97,即1天的差异,但是下一次出现的是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};

然后我得到了“Max”的区别,但我只是想知道在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位(diff = 3)
步骤2:“97”位于第6位,然后位于第16位(diff = 10)
步骤3:“97”位于第16位,然后位于第21位(diff = 5)
步骤4:MAX diff = 10

我必须抱怨这一点,我在上午08:59发布了这个问题,我在1分钟后(9点)重新加载页面,它已经被投票,没有时间阅读和理解这个问题,这很荒谬

3 个答案:

答案 0 :(得分:0)

试试这个:

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`

这是小提琴: http://sqlfiddle.com/#!2/1a6a3/10

对于只有一个计数值的行(例如62,47),这将使max_day_diff为0

答案 1 :(得分:0)

我认为这会让你得到你想要的东西。

SQLFiddle!

这是一张非常时髦的桌子,顺便说一下。

答案 2 :(得分:0)

两者都有效:

http://sqlfiddle.com/#!2/243f2/22

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

http://sqlfiddle.com/#!2/243f2/25

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