【问题标题】:MySQL-Count consective numberMySQL-Count 连续数
【发布时间】:2022-01-24 13:39:38
【问题描述】:

编写一个 SQL 查询来查找数字位置以及数字和连续数字计数

CREATE TABLE Logs (
  `Id` INTEGER,
  `Num` INTEGER
);

INSERT INTO Logs
  (`Id`, `Num`)
VALUES
  ('1', '1'),
  ('2', '1'),
  ('3', '1'),
  ('4', '2'),
  ('5', '1'),
  ('6', '2'),
  ('7', '2');

优先退货

StartId Num Count
1       1   3
4       2   1
5       1   1
6       2   2  

我也能得到任何建议,哪个函数可以与 MySQL 函数中的 case 函数一起使用

【问题讨论】:

  • 我看不到你是如何从你的输入中得到你的输出的,你是否显示了一个数字的最小 ID?当输入只有 5,1 然后移动到 6,2 时,你是如何得到 5,1,2 的,为什么最后一行不是 6,2,2,即 num 2 的最小 id 出现 2 次。
  • 抱歉混淆了,我这边算错了,我的错。我已经修改问题了
  • 我已经搭建好了模板测试平台,你可以看看SQL Database Test Platform

标签: mysql sql


【解决方案1】:

查看您的数据和预期结果,我相信您的预期不一致,例如,您可以有 1 和 6 3 和 7。

您需要做的是按连续的num 值对数据进行分组并聚合结果。

with gp as (
    select *, 
        Row_Number() over(order by id)
        - Row_Number() over(partition by num order by id) g
    from logs
)
select Min(id) Id,
    num, Count(*) Count
from gp
group by g, num
order by id

【讨论】:

  • 呀,对不起,应该是6
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 2023-03-18
  • 2014-06-05
  • 1970-01-01
相关资源
最近更新 更多