[英]How can compare if two consecutive rows are arbitrary in SQL Server?
我有一個 SQL 問題,我無法僅使用 SQL 來解決。
問題是:我有一個有 2 列的表。 一個是Question
(int 列),另一個是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
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.