基于与ID多列的Sybase SQL SELECT DISTINCT(Sybase SQL Sele

2019-09-22 07:18发布

我想查询Sybase服务器以获得不同类型的数据,我们的测试目的持有的例子。

我有一个表,看起来像下面的(抽象)

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 ,但有一列这只交易

你有什么想法如何实现这个查询?

Answer 1:

也许你不得不使用聚合函数maxmin列ID。 它会返回只有一个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
            )


Answer 2:

试试这个,让我知道,如果它的工作原理:

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

你可能有玩弄max()这里的任意选择为max(),但你可以随意使用min()代替。 max()返回该列中的最大值, min()最小



文章来源: Sybase SQL Select Distinct Based on Multiple Columns with an ID