-1

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

-----------
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*

step1:“97”在第 3 位,然后在第 6 位(diff = 3)
step2:“97”在第 6 位,然后在第 16 位(diff = 10)
step3:“97”在第 16 位,然后在第 21 位 (diff = 5)
step4 : MAX diff = 10

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

4

3 回答 3

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

于 2013-10-10T14:43:07.700 回答
0

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

SQLFiddle!

顺便说一句,那是一张非常时髦的桌子。

于 2013-10-10T15:23:30.607 回答
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
于 2013-10-11T08:35:54.220 回答