2012-09-11 50 views
3

我試圖查詢sybase服務器以獲取我們爲測試目的而持有的不同類型數據的示例。Sybase SQL選擇基於具有ID的多列的差異

我有一個表,看起來像下面的(抽象)

Animals table: 
id | type | breed   | name 
------------------------------------ 
1 | dog | german shepard | Bernie 
2 | dog | german shepard | James 
3 | dog | husky   | Laura 
4 | cat | british blue | Mr Fluffles 
5 | cat | other   | Laserchild 
6 | cat | british blue | Sleepy head 
7 | fish | goldfish  | Goldie 

正如我前面提到我希望每個類型的例子所以上表想一個結果集一樣(實際上我只是想該ID的):

id | type | breed   
--------------------------- 
1 | dog | german shepard 
3 | dog | husky   
4 | cat | british blue 
5 | cat | other   
7 | fish | goldfish  

我試過,如下面的查詢的多種組合,但他們要麼是無效的SQL(用於Sybase)或返回無效結果

SELECT id, DISTINCT ON type, breed FROM animals 
    SELECT id, DISTINCT(type, breed) FROM animals 
    SELECT id FROM animals GROUP BY type, breed 

我發現其他問題,如SELECT DISTINCT on one column但有一列

這只是交易你有任何想法如何實現這個查詢?

回答

1

也許您必須對列ID使用聚合函數maxmin。它只會爲分組列返回一個ID。

select max(Id), type, breed 
from animals 
group by type, breed 

編輯:

其他不同的方式來做到這一點:

與載有聚合函數

select id, type, breed 
from animals 
group by type, breed 
having id = max(Id) 

與載有彙總子查詢

select id, type, breed 
from animals a1 
group by type, breed 
having id = (
       select max(id) 
       from animals a2 
       where a2.type = a1.type 
       and a2.breed = a1.breed 
      ) 
+0

這和預期一樣,但花了大約20分鐘跑,會離開的問題開放尋找一個更優雅(和快速)的解決方案,但如果沒有人有任何會接受其他建議! –

+0

我找到了其他方法來做到這一點。我不確定它是否會更快,也許是第二個命題。也許第一個建議更具可讀性。我編輯了這篇文章。 – Parado

-1

試試這個,讓我知道,如果它的工作原理:

select distinct breed, max(id) as id , max(type) as type 
from animals 

您可能要玩弄max() 這裏的任意選擇爲max(),但你可以隨意使用min()代替。 max()返回該列中的最大值,min()最小