获取多个元素的最小开始日期并将它们分组?
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
我有这个 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