-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中最后一行之间的行数?请注意,某些数字会重复两次或更多次。该脚本应使用最低的行。这是 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 回答