2016-10-19 75 views
2

使用學期系統的學術術語將一年分爲兩部分。SQL使用GROUP BY選擇最新行

我有以下從SQL查詢,術語,如上述的結果,有其值從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 

我想返回爲每個學生的最新學期(一年期)的相應行,所以結果看起來像:

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

我正在使用GROUP BY子句與這些特點:

  • 分組由「ID」
  • 選擇MAX(年)
  • 選擇MAX(期限)

的問題是,我需要的長期保存到相應的年份和MAX(Term)子句是導致錯誤的那個子句。例如,使用我現在拿到了查詢,結果是不正確的,因爲它會返回該行:

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

而是這一個(這是正確的)的:

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

維護更新的日期列。使用這個列可以實現你想要的任何東西。