首页 > 解决方案 > 如果 SQL Server 中的两个连续行是任意的,如何比较?

问题描述

我有一个 SQL 问题,我无法仅使用 SQL 来解决。

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

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

输出应该是这样的;

Range        Answer
-----------+----------
1-2        |   A
3-3        |   C
4-6        |   D
7-7        |   E
8-8        |   A
9-9        |   B
10-12      |   A

我只是能够做到这一点,

select question, answer
from table
order by answer, question asc

抱歉,我对 SQL 很陌生,所以我不知道如何编写这个查询..

标签: sqlsql-servertsqlgaps-and-islands

解决方案


这是一个差距和孤岛问题。您可以通过使用row_number()枚举答案的值来处理它。这和问题之间的区别是不变的——识别岛屿:

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);

推荐阅读