2016-10-27 4 views
1

過去数日間、私はどのようにクエリを実行するかとスタックしました。カテゴリの最初のステータスを変更するレコードの下にあるようなテーブルから選択したいと思います。カテゴリ列に同じクラスのレコードのサブセット(n = 1)を選択します

Id Category Month 

1  Start  Jan 
2  Start  Feb 
3  Middle  Mar 
4  Middle  Apr 
5  End  May 

このテーブルからは、カテゴリが変更されたレコードのみが必要です。だから、私のテーブルをSELECTのようにしたい:

Id Category Month 

1  Start  Jan 
3  Middle  Mar 
5  End  May 

私の質問に答える時間を取ってくれてありがとう前にありがとう。

+0

追加のコメントとして:私はSQL Serverを使用しています2014 –

答えて

0

私が正しく理解していれば、あなたがしていることはGROUP BYを使って達成することができます。

SELECT MIN(id) as ID, Category, MIN(Month) as Month 
FROM MyTable 
GROUP BY Category 
+0

私はそれが近いと思うが、MIN(月)は必ずしもそうでないかもしれない。おそらく。 IN句のMin(id)は、カテゴリの最古の行を引き出すだけです(単位は自動インクリメントと仮定します) –

+0

おそらくOPの質問では、それは時系列的に聞こえるかもしれません。その仕様を考えると、より複雑なクエリが必要であるかどうかはわかりません。私はこれが本当であるかどうかを見るために待つでしょう。 – Santi

+0

ありがとうございました。はい、私がやりたいことだったSanti –

3

すべてのカテゴリの最小のIDを引き出し、そのレコードの月を取得:

select 
    t1.id, t1.category, t2.month 
from (
    select category, min(id) as id 
    from yourtable 
    group by category 
) t1 
join t2 on t1.id = t2.id and t1.category = t2.category -- second may not be necessary 

あなたid列が一意である場合は、categoryとの条件が必要とされていません。 上記のコードは、IDが最小のカテゴリごとにmonth列から値を取得します。

関連する問題