首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果两个连续行在Server中是任意的,如何进行比较?

如果两个连续行在Server中是任意的,如何进行比较?
EN

Stack Overflow用户
提问于 2020-05-25 13:09:27
回答 2查看 426关注 0票数 1

我有一个SQL问题,我不能只用SQL来解决。

问题是:我有一个两列的表。一个是Question (int列),另一个是Answer (varchar(1)),如下所示:

代码语言:javascript
运行
复制
Question  Answer
--------+---------
1       |   A
2       |   A
3       |   C
4       |   D
5       |   D
6       |   D
7       |   E
8       |   A
9       |   B
10      |   A
11      |   A
12      |   A

输出应该是这样的;

代码语言:javascript
运行
复制
Range        Answer
-----------+----------
1-2        |   A
3-3        |   C
4-6        |   D
7-7        |   E
8-8        |   A
9-9        |   B
10-12      |   A

我刚能做到,

代码语言:javascript
运行
复制
select question, answer
from table
order by answer, question asc

对不起,我对SQL非常陌生,所以我不知道如何编写这个查询。

EN

回答 2

Stack Overflow用户

发布于 2020-05-25 13:11:11

这是一个空隙和岛屿问题。您可以通过使用row_number()枚举答案的值来处理它。这和问题之间的区别是不变的--确定岛屿:

代码语言:javascript
运行
复制
select min(question), max(question), answer
from (select t.*, row_number() over (partition by answer order by question) as seqnum
      from t
     ) t
group by (question - seqnum), answer
order by min(question);
票数 3
EN

Stack Overflow用户

发布于 2020-05-25 13:12:08

这是一个空隙和岛屿问题。下面是一种使用行号之间的差异来定义组的方法。

代码语言:javascript
运行
复制
select 
    concat(min(question), '-', max(question)) range,
    answer 
from (
    select 
        t.*,
        row_number() over(order by question) rn1,
        row_number() over(partition by answer order by question) rn2
    from mytable t
) t
group by answer, rn1 - rn2
order by min(question)

这种方法的好处是,即使question的数字有缺口,它也能工作。

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

https://stackoverflow.com/questions/62003098

复制
相关文章

相似问题

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