2016-10-19 10 views
2

を使用して最新の行を選択する学期のシステムを使用している学術用語は、年を2つに分割します。前述したように、私は、SQLクエリからの用語を、以下の結果をしましたSQL GROUP BY

、1から2までの値は常に、それはまた、その特定の用語のための学生(ID)のスコアを保持しています

ID | Year | Term | Career | Score 
----------------------------------- 
1 | 2015 | 2 | 70 | 3,25 
1 | 2015 | 1 | 70 | 3,58 
2 | 2015 | 1 | 71 | 4,05 
2 | 2014 | 2 | 71 | 4,17 
3 | 2012 | 2 | 70 | 3,88 
3 | 2012 | 1 | 70 | 4,23 
3 | 2011 | 2 | 70 | 4,78 

私は生徒ごとに最新の学期(年期)のための対応する行を返すようにしたいので、次のようになり、結果:私はこれらとGROUP BY句の使用を作ってるんだ

ID | Year | Term | Career | Score 
----------------------------------- 
1 | 2015 | 2 | 70 | 3,25 
2 | 2015 | 1 | 71 | 4,05 
3 | 2012 | 2 | 70 | 3,88 

特殊性:

「ID」
  • MAX(年)を選択
  • MAX(期間)を選択することによって
    • グループは

    問題は、私は、対応する年に用語を維持する必要があるということですMAX(Term)句は、間違いを引き起こす句です。例えばそれは、この行を返しますので、私は今だクエリを使用して、結果は真ではありません。

    ID | Year | Term | Career | Score 
    ----------------------------------- 
    2 | 2015 | 2 | 71 | 4,05 
    

    代わりに(正しいものである)この1の:

    ID | Year | Term | Career | Score 
    ----------------------------------- 
    2 | 2015 | 1 | 71 | 4,05 
    

    どのようにすることができます私は(年期)との対応をとっていますか?

    ヒント:2015-2が2015-1より大きく、2014-1が2013-2より大きい。

  • 答えて

    0

    残念ながら、Informixはrow_number()を提供していません。

    以下は機能しますか?

    select t.* 
    from t 
    where year || term = (select max(t2.year || t2.term) 
             from t t2 
             where t2.id = t.id 
            ); 
    
    +0

    これは機能します。どうもありがとう!この方法を使うことで、私は必要なものを達成することができました。 –

    1

    更新日の列を更新します。この列を使用して、必要なものを達成することができます。