我正在使用一个名为CELCAT的时间表应用程序,试图抽出一些关于学生应该被标记为报告的数据...这似乎是非常困难的,因为这样添加和学生登记的结构去除见下文: sql转向添加日期范围和删除日期范围
studentid eventid fromdatetime addition removal
25149 25145 2009-09-12 10:30:00.000 Y NULL
25149 25145 2009-09-12 10:30:00.000 NULL Y
25149 25145 2009-09-12 10:30:00.000 Y NULL
25150 23013 2009-09-08 09:00:00.000 Y NULL
25150 23554 2009-09-07 09:00:00.000 Y NULL
25150 25145 2009-09-12 10:30:00.000 Y NULL
25150 25145 2009-07-27 00:00:00.000 NULL Y
25150 25145 2009-09-12 10:30:00.000 Y NULL
25150 25145 2009-09-12 10:30:00.000 NULL Y
25150 25145 2009-09-12 10:30:00.000 Y NULL
25150 25148 2009-09-12 15:00:00.000 Y NULL
25151 25145 2009-09-12 10:30:00.000 Y NULL
25151 25145 2009-10-10 00:00:00.000 NULL Y
25152 25145 2009-09-19 10:30:00.000 Y NULL
25152 25145 2009-07-27 00:00:00.000 NULL Y
因此,一个除了学生的手段,他们应该从该日起在寄存器中被标记(寄存器是用自己的周轮廓每周reccurring事件,但我可以处理它的那一面)。删除将意味着学生不需要在此日期之后被标记,但是可能会在稍后的一周内添加,删除并重新添加学生。
我想会得到我在正确的方向将是让结构
studentid eventid fromdate todate
25149 25145 2009-09-12 10:30:00.000 2009-09-28 10:30:00.000
25149 25145 2009-10-13 10:30:00.000 2009-10-24 10:30:00.000
任何想法如何做到这一点的桌子吗?还是更好的建议?我想它会涉及一些游标的使用,除非有人有一个很棒的解决方案。这些表格由CELCAT设计,不能修改。
哦,是它的SQL Server 2005的
通过KM编辑,这里是一些代码来测试的解决方案:
DECLARE @YourTable table (studentid int
,eventid int
,fromdatetime datetime
,addition char(1)
,removal char(1)
)
SET NOCOUNT ON
INSERT INTO @YourTable VALUES (25149,25145,'2009-09-12 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25149,25145,'2009-09-12 10:30:00.000', NULL,'Y')
INSERT INTO @YourTable VALUES (25149,25145,'2009-09-12 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25150,23013,'2009-09-08 09:00:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25150,23554,'2009-09-07 09:00:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25150,25145,'2009-09-12 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25150,25145,'2009-07-27 00:00:00.000', NULL,'Y')
INSERT INTO @YourTable VALUES (25150,25145,'2009-09-12 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25150,25145,'2009-09-12 10:30:00.000', NULL,'Y')
INSERT INTO @YourTable VALUES (25150,25145,'2009-09-12 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25150,25148,'2009-09-12 15:00:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25151,25145,'2009-09-12 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25151,25145,'2009-10-10 00:00:00.000', NULL,'Y')
INSERT INTO @YourTable VALUES (25152,25145,'2009-09-19 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25152,25145,'2009-07-27 00:00:00.000', NULL,'Y')
SET NOCOUNT OFF
如何从给定的样本数据中获取这两个日期范围行?当您想要的“答案”与给定的样本数据不匹配时,很难为您做出查询。 – 2009-10-01 17:44:22
此表/视图中是否有另一列表示添加记录时的时间戳或至少是增量标识符?如果不是这样,那么为ID = 25149的学生设置一个逻辑是相当困难的,因为他被添加到同一个事件或从同一个事件中移除了3次,但是不清楚先做了什么。 – van 2009-10-02 15:33:20
如果你指出你希望得到什么样的“最终”结果,而不仅仅是“......正确的方向......”,它也会有所帮助。谢谢 – van 2009-10-02 16:10:07