【发布时间】:2015-01-22 08:56:33
【问题描述】:
我有一个包含学生数据的表(ClassEnrolments):
StudentId Student Module Status EndDate Credits
12345678 J Bloggs Introduction Pass 2014/09/01 10
12345678 J Bloggs Advanced Pass 2014/06/01 15
23456789 T Guy Introduction Pass 2013/05/25 10
23456789 T Guy Advanced Pass 2014/03/21 15
我想要做的是返回有关学生在设定的时间段内总共学习了多少模块的信息,例如,如果我们获取上述数据并查看 2014 年 1 月 1 日至 24 日期间/11/2014 它将返回以下内容(基于 EndDate)
StudentId Student Modules Credits AnnivDate
12345678 J Bloggs 2 25 2015/06/01
23456789 T Guy 1 15 2014/05/25
这是使用 SQL Server 2008 - 任何帮助将不胜感激。
我现在也想知道是否使用相同的场景 - 是否可以计算从那些学习的模块中获得的学分数量?
另一个想法!根据学生最重要的模块查看某种周年日期会很有用。这将有助于确定学生是否在周年纪念日之前获得了正确的学分。我玩过 DATEADD 函数的想法,但这似乎又重复了学生信息。
DATEADD(MONTH, DATEDIFF(MONTH, 0, EndDate()) +12,0) AS AnnivDate
我明白为什么,因为会有多个实例,但是有没有办法查看 EndDate 的第一个实例?
【问题讨论】:
-
我想问一下你的任务的目的,我的意思是你得到了模块的数量,而不是一个学生完成的模块的名称。我只是在猜测你是否只想这样?跨度>
-
没错,是的。不一定对模组名称感兴趣,只是在特定时期内拍摄了多少。
-
感谢大家的建议,一切似乎都很好!
-
@SB1987 - 我没有得到周年纪念日逻辑如何找到学生最重要的模块
-
基本上假设一个学生从他们从相关时间段开始学习第一个模块开始有 12 个月的时间(WHERE EndDate BETWEEN '2014-01-01' AND '2014-11-24') .我需要代码来查看模块的日期,确定首先研究哪个,然后添加 12 个月并将其返回到 AnnivDate 列中
标签: sql sql-server sql-server-2008 aggregate-functions