让学生有空闲时间 (SQL)

Get Students Free Time (SQL)

我有一个 SQL 服务器数据库,其中有一个 Students table 列 IDNameSurname 等。我还有第二个 Meetings table,其中列 StartTimeEndTimeStudentId 作为学生的外键。

现在我想编写一个查询来获取在任意两次会议之间有指定空闲时间的学生。稍后我需要将其转换为 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 查询视图。