我想检索连续数字及其计数,例如在我的数据库中我有输入
1,2,3,4,5,9,10,12,14,15,16,51,81
我预计输出
Numbers counts
1-5 5
9-10 2
12-16 4
51 1
81 1
如果有人知道,请分享解决方案....
答案 0 :(得分:3)
免责声明:这是为了它的乐趣。使用您选择的实际编程语言可能更容易。
这并不像第一眼看上去那么容易,你必须使用user-defined variables。
示例数据:
CREATE TABLE t
(`id` int)
;
INSERT INTO t
(`id`)
VALUES
(1),
(2),
(3),
(4),
(5),
(9),
(10),
(12),
(14),
(15),
(16),
(51),
(81)
;
查询:
SELECT CONCAT_WS('-', MIN(id), IF(MAX(id) = MIN(ID), NULL, MAX(id))), COUNT(*)
FROM (
SELECT
id
, @group_number := IF(@prev != id - 1, @group_number + 1, @group_number) AS gn
, @prev := id
FROM
t,
(SELECT @group_number := 0, @prev := NULL) var_init_subquery
ORDER BY id
) sq
GROUP BY gn
结果:
| CONCAT_WS('-', MIN(id), IF(MAX(id) = MIN(ID), NULL, MAX(id))) | COUNT(*) |
|---------------------------------------------------------------|----------|
| 1-5 | 5 |
| 9-10 | 2 |
| 12 | 1 |
| 14-16 | 3 |
| 51 | 1 |
| 81 | 1 |
答案 1 :(得分:0)
+-----------------------+----------+
| cheque_no Ascending 1 | COUNT(*) |
+-----------------------+----------+
| 0 | 1 |
| 69843-69867 | 25 |
| 69867-69919 | 53 |
| 69919-69922 | 4 |
| 69922-69923 | 2 |
| 69923-69924 | 2 |
| 69924-69925 | 2 |
| 69925-69926 | 2 |
| 69926-69929 | 4 |
| 69929-69930 | 2 |
| 69930-69931 | 2 |
| 69931-69932 | 2 |
| 69932-69936 | 5 |
| 69936-69937 | 2 |
| 69937-70000 | 64 |
| 74101-74106 | 6 |
| 74108-74148 | 41 |
+-----------------------+----------+
尽管阅读了免责声明,我还是可以这样做。现在只需要一个紧急选项