如果我有一个包含文件名的表,例如
filenames
1201
1202
1203
1205
1207
1208
1301
1302
1303
1304
1305
1306
我希望结果是
sequences grouped , count
12 3
12 1
12 2
13 6
或类似的东西。
否则我只是提取列并在python中做某事?
答案 0 :(得分:3)
您可以通过枚举行然后获取差异来实现此目的。在MySQL中,您使用枚举变量:
select min(filename) as first_filename, max(filename) as last_filename, count(*) as num
from (select t.*, @rn := @rn + 1 as rn
from table t cross join (select @rn := 0) vars
) t
group by (filename - rn);
请注意,这种假设filename
是一个数字 - 毕竟,连续对其他类型意味着什么?如果它是一个表示为字符串的整数,那么这仍然有效。
答案 1 :(得分:0)
如果记录的长度相同,则可以使用
LEFT(filenames, 2)
这将为您提供相应的前两个数字。然后使用
RIGHT(filenames, 1)
这将给出相应的最后一个数字。
答案 2 :(得分:0)
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table(id INT NOT NULL PRIMARY KEY);
INSERT INTO my_table VALUES
(1201),
(1202),
(1203),
(1205),
(1207),
(1208),
(1301),
(1302),
(1303),
(1304),
(1305),
(1306);
SELECT a.id start
, MIN(c.id) - a.id + 1 cnt
FROM my_table a
LEFT
JOIN my_table b
ON b.id + 1 = a.id
LEFT
JOIN my_table c
ON c.id >= a.id
LEFT
JOIN my_table d
ON d.id - 1 = c.id
WHERE b.id IS NULL
AND c.id IS NOT NULL
AND d.id IS NULL
GROUP
BY a.id;
+-------+------+
| start | cnt |
+-------+------+
| 1201 | 3 |
| 1205 | 1 |
| 1207 | 2 |
| 1301 | 6 |
+-------+------+