這裏的數據:SQL爲每個組查找列順序由另一列
studentid,state,score,date,modno,transactionno
1,IL,10,20170101,0,0
1,VA,20,20170102,1,1
1,FL,30,20170103,2,2
2,VA,40,20170101,0,0
2,IL,50,20170102,1,1
2,IN,60,20170103,2,2
這裏的輸出應該是這樣:
studentid,state,score,date
1,IL,20,20170101
2,VA,60,20170102
所以基本上我們通過studentid要組。
根據最低的modno和transactionno查找第一個狀態。
根據最高的modno和transactionno查找第一個分數。
select studentid,
(select top 1 state from student s1 where s.studentid = s1.studentid order by modno, transactionno) as state,
(select top 1 score from student s1 where s.studentid = s1.studentid order by modno desc, transactionno desc) as score,
(select top 1 date from student s1 where s.studentid = s1.studentid order by modno, transactionno) as date
from student s
group by studentid
以上是我在SQL 2008中的查詢。是否有其他方法來編寫此查詢以獲得更好的性能?當處理大型數據集並且每組拉出兩個以上的列時,它真的會顯示出來。
爲什麼一個'studentid'列有在'student'表中的多個行? –
我不理解輸出。應該使用什麼*日期*爲什麼20爲id - 1?它不應該是30嗎? – Parfait