簡體   English   中英

如果 SQL 服務器中的兩個連續行是任意的,如何比較?

[英]How can compare if two consecutive rows are arbitrary in SQL Server?

我有一個 SQL 問題,我無法僅使用 SQL 來解決。

問題是:我有一個有 2 列的表。 一個是Question (int 列),另一個是Answervarchar(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

Output 應該是這樣的;

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 真的很陌生,所以我不知道如何編寫此查詢..

這是一個差距和孤島問題。 您可以使用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);

這是一個差距和孤島問題。 這是一種使用行號之間的差異來定義組的方法。

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的數字有差距,它也能工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM