3

我正在尝试查询 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但这仅涉及一列

你知道如何实现这个查询吗?

4

2 回答 2

2

也许您必须使用聚合函数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
            )
于 2012-09-11T11:45:52.643 回答
-1

试试这个,让我知道它是否有效:

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

您可能不得不使用max() 这里的任意选择是 max(),但您可以任意使用 min()。 max()返回该列的最大值,min()最小值

于 2013-05-30T19:55:39.860 回答