我有一个表格,每天都会插入一些值,就像这样
-----------
id | count
-----------
1 | 97
2 | **97**
3 | 59
4 | 62
5 | 47
6 | 59
7 | 59
8 | **97**
-----------
我需要获得重复值之间的最大日差,即,你可以看到第1和第2个值是97,即1天的差异,但是下一次出现的是6天后,所以我需要得到这个“最大”差异(6)。
$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点)重新加载页面,它已经被投票,没有时间阅读和理解这个问题,这很荒谬
答案 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)
答案 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