-1

私は毎日いくつかの値が挿入されたテーブルを持っています。

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

繰り返される値の間の最大日差を取得する必要があります。つまり、1 番目と 2 番目の値は 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位 (差分=5)
step4 : MAX差分= 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

これにより、カウント値が1つしかない行の max_day_diff が0になります(この場合は62、47など)

于 2013-10-10T14:43:07.700 に答える
0

これであなたが探しているものが得られると思います。

SQLフィドル!

ところで、それはあなたがそこに持っているかなりファンキーなテーブルです。

于 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 に答える