首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用mysql获取连续数字?

如何使用mysql获取连续数字?
EN

Stack Overflow用户
提问于 2017-05-24 06:21:07
回答 2查看 2.8K关注 0票数 0

我希望检索连续数字及其计数,例如,在db 中,我有类似于的输入。

代码语言:javascript
运行
复制
1,2,3,4,5,9,10,12,14,15,16,51,81

I预期输出

代码语言:javascript
运行
复制
Numbers         counts
  1-5              5
  9-10             2
 12-16             4
   51              1
   81              1

如果有人知道的话请分享解决方案..。

EN

回答 2

Stack Overflow用户

发布于 2017-05-24 07:33:29

免责声明:这是为了好玩。使用您所选择的实际编程语言可能更容易。

这并不像最初看上去那么容易,您必须使用用户定义变量

样本数据:

代码语言:javascript
运行
复制
CREATE TABLE t
    (`id` int)
;

INSERT INTO t
    (`id`)
VALUES
    (1),
    (2),
    (3),
    (4),
    (5),
    (9),
    (10),
    (12),
    (14),
    (15),
    (16),
    (51),
    (81)
;

查询:

代码语言:javascript
运行
复制
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

结果:

代码语言:javascript
运行
复制
| 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 |
  • 看到它在木琴中运行
票数 3
EN

Stack Overflow用户

发布于 2020-05-12 06:46:34

代码语言:javascript
运行
复制
+-----------------------+----------+
| 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 |
+-----------------------+----------+

尽管在阅读了免责声明之后,我可能会这么做。只是暂时需要一个紧急的选择

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44150410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档