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などの他の質問を1つの列で見つけましたが、これは1つの列のみを扱います

このクエリを実装する方法を知っていますか?

4

2 に答える 2

2

たぶん、集計関数maxまたはmin列IDを使用する必要があります。グループ化された列に対して1つの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 に答える