2017-10-21 42 views
1

這裏是我的SQL小提琴:http://sqlfiddle.com/#!4/75ab7/2Oracle SQL中,如何選擇組中的第一行?

基本上,我創建了一個表,並插入一些數據吧。

CREATE TABLE subject (
    id INT NOT NULL, 
    seq_num INT NOT NULL, 
    name VARCHAR(30) NOT NULL 
); 

INSERT INTO subject 
    (id, seq_num, name) 
VALUES 
    (1, 1, 'sub_1_1'); 

INSERT INTO subject 
    (id, seq_num, name) 
VALUES 
    (2, 1, 'sub_1_2'); 

INSERT INTO subject 
    (id, seq_num, name) 
VALUES 
    (3, 2,'sub_2_1'); 

INSERT INTO subject 
    (id, seq_num, name) 
VALUES 
    (4, 2, 'sub_2_2'); 

INSERT INTO subject 
    (id, seq_num, name) 
VALUES 
    (5, 2, 'sub_2_3'); 

INSERT INTO subject 
    (id, seq_num, name) 
VALUES 
    (6, 3, 'sub_3_1'); 

INSERT INTO subject 
    (id, seq_num, name) 
VALUES 
    (7, 3, 'sub_3_1'); 

我運行這個select語句:

select 
    LISTAGG(TRIM(id), ',') WITHIN GROUP (ORDER BY 1) AS IDS, 
    seq_num, 
    LISTAGG(TRIM(name), ',') WITHIN GROUP (ORDER BY 1) AS NAMES 
from 
    subject 
group by 
    seq_num 
order by 
    seq_num asc 

select語句的結果:

| ids | seq_num | names     | 
|-------|---------|-------------------------| 
| 1,2 | 1  | sub_1_1,sub_1_2   | 
| 3,4,5 | 2  | sub_2_1,sub_2_2,sub_2_3 | 
| 6,7 | 3  | sub_3_1,sub_3_1   | 

我可以生成這樣的事情?

| ids | seq_num | names | 
|-----|---------|---------| 
| 1 | 1  | sub_1_1 | 
| 3 | 2  | sub_2_1 | 
| 6 | 3  | sub_3_1 | 

這只是挑選組的第一行。

回答

1

您可以使用Oracle的keepfirst

select seq_num, 
     max(trim(id)) keep (dense_rank first order by trim(id)) as first_id, 
     max(trim(name)) keep (dense_rank first order by trim(id)) as first_name 
from subject 
group by seq_num 
order by seq_num asc; 

Here是SQL小提琴。

+0

你能解釋一下在這裏使用Trim()的意義嗎? –

+1

@Harshil。 。 。這是OP的一個問題,應該問這個問題。 'trim()'用在問題的代碼中。 –

+0

好的..謝謝你的快速回復。 –

2

使用行號:

select 
    id, seq_num, name 
from 
(
    select id, seq_num, name, 
     row_number() over (partition by seq_num order by id) rn 
    from subject 
) t 
where rn = 1 
order by seq_num; 

這裏是你更新的小提琴鏈接:

Demo

1

這應該工作:

select 
    min(id) AS IDS, 
    seq_num, 
    min(name) AS NAMES 
from 
    subject 
group by 
    seq_num 
order by 
    seq_num asc; 

Working Demo

希望它有幫助!

相關問題