台灣最大程式設計社群網站
線上人數
1981
 
會員總數:246228
討論主題:189787
歡迎您免費加入會員
討論區列表 >> MS SQL >> 分組排序的SQL語法
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
分組排序的SQL語法
價值 : 50 QP  點閱數:1583 回應數:5
樓主

阿弦
門外漢
0 28
511 56
發送站內信

各位好
我目前有一個SQL語法想問各位

目前我的table的資料長這樣


欄位的話
Name是學生的姓名
Subject是科目名
Score是分數
Latest Update Time是上次更新分數的時間


現在我想要排序變成這樣

排序以Latest Update Time這個欄位為主
像是學生C的國文是最近期被更改的 學生C的所有科目就往上排序
而每個學生的科目也要再依照Latest Update Time再排序一次
像是學生C的英文和數學就對調了

不曉得有沒有做到這種分組排序的SQL語法?
希望各位高手們能夠給予指點 感謝了(鞠躬)Orz




搜尋相關Tags的文章: [ SQL ] , [ 排序 ] , [ 分組 ] , [ order by ] , [ group by ] , [ MS SQL ] ,
本篇文章發表於2016-05-13 11:32
1樓
作者回應

阿弦
檢舉此回應
嗚嗚~圖片無法上傳上來
用以下的文字來顯示表格好了
原本的表格:

Name|Subject|Score|Latest Update Time
---------------------------------------
學生A|國文|60|2016/5/12 11:41
學生A|英文|70|2016/5/13 00:52
學生A|數學|80|2016/5/10 10:05
學生B|國文|40|2016/5/11 11:41
學生B|英文|55|2016/5/14 08:41
學生B|數學|80|2016/5/9 10:21
學生C|國文|85|2016/5/15 11:51
學生C|英文|75|2016/5/11 11:35
學生C|數學|65|2016/5/14 09:41


想要排序後的表格:

Name|Subject|Score|Latest Update Time
------------------------------------------------
學生C|國文|85|2016/5/15 11:51
學生C|數學|65|2016/5/14 09:41
學生C|英文|75|2016/5/11 11:35
學生B|英文|55|2016/5/14 08:41
學生B|國文|40|2016/5/11 11:41
學生B|數學|80|2016/5/9 10:21
學生A|英文|70|2016/5/13 00:52
學生A|國文|60|2016/5/12 11:41
學生A|數學|80|2016/5/10 10:05




本篇文章回覆於2016-05-13 11:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

阿弦
檢舉此回應
以下是範例的語法

CREATE TABLE MyTable
([UserName] nvarchar(50), [Subject] nvarchar(50), [Score] int, [Latest_Update_Time] datetime)
;

INSERT INTO MyTable
([UserName], [Subject], [Score], [Latest_Update_Time])
VALUES

(N'學生A', N'國文',60, '2016/5/12 11:41:14'),
(N'學生A', N'英文',70, '2016/5/13 12:52:14'),
(N'學生A', N'數學',80, '2016/5/10 10:05:10'),
(N'學生B', N'國文',40, '2016/5/11 11:41:14'),
(N'學生B', N'英文',55, '2016/5/14 08:41:14'),
(N'學生B', N'數學',80, '2016/5/9 10:21:14'),
(N'學生C', N'國文',85, '2016/5/15 11:51:14'),
(N'學生C', N'英文',75, '2016/5/11 11:35:14'),
(N'學生C', N'數學',65, '2016/5/14 09:41:14')
;
本篇文章回覆於2016-05-13 13:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

阿弦
檢舉此回應
弄出來了
SELECT UserName
,Subject
,Score
,Latest_Update_Time
,MAX(Latest_Update_Time) OVER (
PARTITION BY UserName ORDER BY Latest_Update_Time DESC
) 'MAX_UPDATE_TIME'
FROM MYTABLE
ORDER BY [MAX_UPDATE_TIME] DESC
本篇文章回覆於2016-05-13 17:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

阿弦
檢舉此回應
自推一下,還有其他人有其他寫法嗎?
我會把點數給他喔~~~
本篇文章回覆於2016-08-10 11:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
select * from MyTable order by [UserName] desc ,[Latest_Update_Time] desc 好像這樣就可以嚕
本篇文章回覆於2016-08-10 15:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.