让学生有空闲时间 (SQL)
Get Students Free Time (SQL)
我有一个 SQL 服务器数据库,其中有一个 Students
table 列 ID
、Name
、Surname
等。我还有第二个 Meetings
table,其中列 StartTime
、EndTime
和 StudentId
作为学生的外键。
现在我想编写一个查询来获取在任意两次会议之间有指定空闲时间的学生。稍后我需要将其转换为 LINQ 查询。
如何编写此查询?
粗略的建议:
- 创建视图(或CTE) that uses
row_number()
按顺序为每个学生的Meeting
行编号。
- 在
b.RowNum = a.RowNum + 1 and a.StudentID = b.StudentID
上将该视图与其自身合并。这为每个空闲块提供一行,其中 a
是任意会议,b
是该学生之后的会议。 Select b.StartTime - a.EndTime
查找每个空闲块的持续时间。您可以将此连接查询公开为它自己的视图,称为 FreeBlocks
.
- 然后查询
FreeBlocks
视图以查找具有任何所需持续时间的空闲块的学生应该很简单。您可以从 SQL 或 LINQ 查询视图。
我有一个 SQL 服务器数据库,其中有一个 Students
table 列 ID
、Name
、Surname
等。我还有第二个 Meetings
table,其中列 StartTime
、EndTime
和 StudentId
作为学生的外键。
现在我想编写一个查询来获取在任意两次会议之间有指定空闲时间的学生。稍后我需要将其转换为 LINQ 查询。
如何编写此查询?
粗略的建议:
- 创建视图(或CTE) that uses
row_number()
按顺序为每个学生的Meeting
行编号。 - 在
b.RowNum = a.RowNum + 1 and a.StudentID = b.StudentID
上将该视图与其自身合并。这为每个空闲块提供一行,其中a
是任意会议,b
是该学生之后的会议。 Selectb.StartTime - a.EndTime
查找每个空闲块的持续时间。您可以将此连接查询公开为它自己的视图,称为FreeBlocks
. - 然后查询
FreeBlocks
视图以查找具有任何所需持续时间的空闲块的学生应该很简单。您可以从 SQL 或 LINQ 查询视图。