获取多个元素的最小开始日期并将它们分组?

Get the smallest start date for several elements and group them?

我有这个 table 叫做 "Class"。 Class 有 Class ID、房间 ID 和 Class 开始时间。

例如:

Class_ID: 1

Room_ID: 1234

Class_Start_Time: 07/11/2016 1 pm

Class_ID: 2

Room_ID: 1234

Class_Start_Time: 07/11/2016 9 am

Class_ID: 4

Room_ID: 1235

Class_Start_Time: 07/11/2016 8 am

我需要获得每个房间的最小开始时间。这意味着 1234 房间将获得 07/11/2016 上午 9 点,而 1235 房间将获得 07/11/2016 上午 8 点 (只有一个开始时间)。我试过这个:

 SELECT   Room_ID
 FROM     Courses
 GROUP BY Room_ID
 ORDER BY Class_Start_Time

它要求我将开始时间包括在分组依据中,但如果我这样做,它会给我所有的开始时间和重复的房间,而我只需要每个房间中的一个并按房间各自的开始时间。所以...

Room_ID = 1235

Start time =  07/11/2016 8 am

Room_ID = 1234

Start time =  07/11/2016 9 am

房间的顺序并不重要,重要的是每个最小开始时间的顺序。有什么建议吗?

您可以使用SQL服务器中的排名功能,例如Row_Number。 你可以在这里做一些阅读: https://msdn.microsoft.com/en-us/library/ms186734.aspx

我想这就是您要找的。

Create Table Courses
(
ClassId int null,
Room_Id int null,
Class_Start_Time datetime null
)

Insert into Courses
values ('1','1234','2016-07-11 13:00:00.000')
Insert into Courses
values ('2','1234','2016-07-11 09:00:00.000')
Insert into Courses
values ('4','1235','2016-07-11 08:00:00.000')


Select t.ClassID,t.Room_Id,t.Class_Start_Time from
(
 SELECT *,row_number() over (partition by Room_Id order by Class_Start_Time) as SequenceNumber
 from Courses
 )t
 Where t.SequenceNumber=1
 order by Class_Start_Time

使用 MIN(),为您的 Class_Start_Time 取一个别名并按其排序。

SELECT Room_Id, MIN(Class_Start_Time) Start
FROM Courses
GROUP BY Room_Id
ORDER BY Start