2014-09-03 51 views
-2

我有一個表作爲與學生的考試成績如下:SQL語句返回學生的品位最好

My Table

我想要一個SQL語句,將返回學生的最佳等級:

學生1 - 數學系

學生2 - 數學d

等.....

我試過MAX()日期,DISTINCT,分組依據...但我想我在黑暗中摸索。

編輯:我應該說,等級上的最小值和最大值將不起作用,因爲A *是可能的等級,並且按字母順序排在A之後,這是不正確的。等級可以是各種不具有邏輯等級的字母和數字(例如,L1比EL1好,但L3比L1好)。可能需要有排名的子表嗎?

+0

我應該說,MIN和MAX上檔次將無法正常工作,A *是一個可能的品位和字母順序來後,這是不正確。 – tonyyeb 2014-09-03 13:10:57

+2

你能否更新你的問題,包括你存儲的檔次,以及順序是從最好到最差? – jpw 2014-09-03 13:12:48

+0

@tonyyeb請將該評論添加到問題中,重要信息 – Tanner 2014-09-03 13:13:05

回答

0
SELECT StudentName 
     ,MIN(Grade) Best_Grade 
FROM Table_Name 
GROUP BY StudentName 
+0

被接受爲答案,因爲與等級排名相關聯的另一張表將起作用。謝謝。 – tonyyeb 2014-09-03 13:23:32

+0

@tonyyeb如果你有多個主題,這將無法正常工作。在這種情況下更改:http://sqlfiddle.com/#!2/3de2a4/4/0 – Vland 2014-09-03 13:33:02

+0

@Vland在這種情況下,OP將需要在選擇和分組中添加主題,並且它將返回每個學生的最佳成績學科。 – 2014-09-03 14:00:50

0
Please try below query in SQL : 


create table #test_table(
     name varchar(20), 
     subjects varchar(20), 
     grade varchar, 
     resultdate datetime 
    ) 

    insert into #test_table 
    select 'student1', 'math', 'A','2012-09-01' union all 
    select 'student1', 'math', 'B','2013-09-01' union all 
    select 'student2', 'math', 'D','2014-09-01' union all 
    select 'student1', 'math', 'A','2014-09-01' 

    select * from(
    select row_number() over(partition by name,subjects order by grade,resultdate desc) as rn,* from #test_table) tbl where rn=1 

    drop table #test_table