Я использую приложение хронометража под названием CELCAT и пытаюсь получить некоторые данные о том, когда ученики должны быть помечены для отчетности ... Это кажется чрезвычайно сложным из-за структуры добавления и удаления учеников в регистрах. увидеть ниже:
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
Таким образом, добавление студента означает, что они должны быть отмечены с этой даты в реестре (регистры - это еженедельно повторяющиеся события с собственным профилем недели, хотя я могу справиться и с этой стороной). Удаление будет означать, что студент не должен быть отмечен после этой даты, однако потенциально студент может быть добавлен, удален и затем повторно добавлен в течение более поздней недели.
То, что я думаю, чтобы привести меня в правильном направлении, было бы получить таблицу структуры
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