2014-04-29 50 views
-1

distinct是有可能做這樣的操作?我有表的結構:SQL上everycolumn但一個(ID)

id(unique, serial), parameter(text), description(text), severity(text), topic_id(int, foreign key) 

允許用戶添加相同的行(具有相同parameterdescriptiontopic_idseverity但不同id

當我執行查詢:

SELECT DISTINCT PARAMETER, 
       description, 
       severity 
FROM task 
WHERE topic_id=851; 

其中

parameter  | description  | severity | 
----------------+-----------------+----------+ 
do when possible| ask bob   | 0  |  
     time diff | check time serv | 2  |  
     urgent | fix it asap  | 3  |  
     test | no details aval | 3  |  
     test2 | no details aval | 2  |  
     test3 | no details aval | 2  |  

我得到了我想要的6 rows方含信息的結果。不過,我需要這個查詢返回id每行(這樣我就可以處理得當服務器端)

當我更改查詢:

SELECT DISTINCT id, 
       PARAMETER, 
       description, 
       severity 
FROM task 
WHERE topic_id=851; 

id | parameter  | description  | severity | 
------+-----------------+-----------------+----------+ 
30045| do when possible| ask bob   | 0  |  
30046| time diff  | check time serv | 2  | 
30044| urgent   | fix it asap  | 3  |  
27188| urgent   | fix it asap  | 3  |  
24323| urgent   | fix it asap  | 3  |  
30047| test   | no details aval | 3  | 
30048| test2   | no details aval | 2  |  
30049| test3   | no details aval | 2  | 

結果集包含id場然而,它包含8 rows

是否有可能設置在每列,但iddistinct

+0

你想8個IDS但6行的數據?我沒有得到你的問題...... – Nalaka526

+0

我想在第一次querry像6行唯一但ID – Mithrand1r

+0

怎麼可能是您獲得重複的ID?你能發佈你的行信息嗎? –

回答

1

首先,在你的數據不直觀的東西,所以這是可能的,你可以提高你的數據模型。

然後,你所擁有的信息,也許你可以使用這樣的事情:

select distinct t1.id, 
       t1.PARAMETER, 
       t1.description, 
       t1.severity 
from task t1 
where t1.topic_id=851 
    and t1.id = (
       select max(t2.id) 
       from task t2 
       where t1.parameter = t2.parameter 
       and t1.description = t2.description 
       and t1.severity = t2.severity) 
; 

另一種方式:

select distinct parameter, description, severity, max(id) 
from task 
where topic_id=851 
group by parameter, description, severity 
; 
+0

謝謝!第二個工作非常棒! – Mithrand1r

+0

太棒了!親切的問候 –

+0

順便說一句,你不需要在兩個查詢DISTINCT了:-) – dnoeth

0

這是DISTINCT ON不正是:

SELECT DISTINCT消除結果中的重複行。 SELECT DISTINCT ON消除了與所有指定表達式匹配的行。

http://www.postgresql.org/docs/9.3/static/sql-select.html

SELECT DISTINCT ON (parameter, description, severity) 
     id, parameter, description, severity 
FROM task 
WHERE ...