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并选择最接近结尾的值,并将剩余的行计数到结尾。 谢谢;)
答案 0 :(得分: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
答案 1 :(得分: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)
如何重新安排日期?