-1
 id      date     group n1  n2  n3  n4  n5
18853   1945-01-05  BA  87  34  1   59  50
18854   1945-01-13  BA  6   66  1   16  48 <= the last 16, 7 rows to the end
18855   1945-01-20  BA  38  14  24  78  36
18856   1945-01-27  BA  49  30  87  15  65 <= the last 49, 5 rows to the end
18857   1945-02-03  BA  30  64  36  5   32
18858   1945-02-10  BA  15  36  37  86  31 <= the last 36, 3 rows to the end
18859   1945-02-17  BA  86  78  69  7   60 <= the last 86, 2 rows to the end
18860   1945-02-24  BA  83  7   72  88  19 <= the last 7, 1 row to the end
18861   1945-03-03  BA  47  20  77  73  30 <= the last 47, 0 rows to the end

上記の表があります(ID順ですが、日付順に並べる予定です)。指定された数とmySqlの最後の行の間の行数を取得する方法はありますか? 一部の数字は 2 回以上繰り返されることに注意してください。スクリプトは最下位の行を使用する必要があります。mySQL が出力するテーブルは次のとおりです。

Number|Rows count to the end
16|7
7|1
86|2
49|5
47|0
36|3

クエリは列 n1、n2、n3、n4、n5 を検索し、最後に最も近い値を選択し、残りの行を最後まで数えます。ありがとう ;)

4

2 に答える 2

1

名前のない列に次のような名前が付けられていると仮定します。

c1      c2          c3  c4  c5  c6  c7  c8
18853   1945-01-05  BA  87  34  1   59  50
18854   1945-01-13  BA  6   66  1   16  48
18855   1945-01-20  BA  38  14  24  78  36
18856   1945-01-27  BA  49  30  87  15  65
18857   1945-02-03  BA  30  64  36  5   32
18858   1945-02-10  BA  15  36  37  86  31
18859   1945-02-17  BA  86  78  69  7   60
18860   1945-02-24  BA  83  7   72  88  19
18861   1945-03-03  BA  47  20  77  73  30

さらに、c1がPKインデックス列であり、列c7が関心のある列であると仮定すると、次のようになります。

select t1.c7, MAX(t1.c1), (select count(*)
              from table t2
              where MAX(t1.c1) < t2.c1) as rowsToEnd
from table t1
group by t1.c7

さて、あなたが望むものをおそらく理解した後、以下はあなたが望むものをあなたに与えるはずです:

編集: Imre Lの答えを読んだ後、私はIN演算子を完全に忘れていることに気づいたので、これはよりエレガントな解決策です:

もう一度編集:質問の更新を読んだ後。これは、c4、c5、c6、c7、c8のいずれかに、これらの行のいずれかで発生するすべての番号が含まれていることを前提としています。

select distinct t3.c4, ( select count(*) AS RowsToEnd
                         from table t1
                         where t1.c1 > ( select max(t2.c1)
                                         from table t2
                                         where t3.c4 IN 
                                         (t2.c4, t2.c5, t2.c6, t2.c7, t2.c8)
                        )
from table t3
于 2012-08-27T13:02:38.577 に答える
0

数値の列が名前n1..n6であると仮定します

例の数として 16 を使用

select count(1) 
  from tablename 
 where date > (select date 
               from tablename 
              where 16 in (n1,n2,n3,n4,n5,n6) 
              order by date desc
              limit 1)

繰り返しの日付はどうですか?

于 2012-08-27T13:56:58.180 に答える