所以我目前正在等待我的查詢運行(約需5分鐘)檢測的連續記錄數了很多不同的用戶ID的唯一
我開發了一個查詢,將看在學生的出勤記錄中,識別出一批考勤代碼並根據日期和上課時間對其進行分組。
如果我試圖找到某個特定學生缺勤的最高數量,但是當我嘗試創建一個顯示所有在校學生缺勤情況最高的表格時,這個查詢效果很好。
爲了實現這一點,我使用遊標將StudentNo(唯一ID)分配給參數,然後運行我的原始查詢,並將結果放入名爲@results的臨時表中。
這裏是我的代碼:
DECLARE @StudentId INT
DECLARE @getStudentId CURSOR
DECLARE @Results TABLE(StudentNo INT,AttendanceCode VarChar(2),StartDate DateTime,EndDate DateTime,"# of Classes" INT)
SET @getStudentId = CURSOR FOR
SELECT StudentNo
FROM [dbo].[Students]
OPEN @getStudentId
FETCH NEXT
FROM @getStudentId INTO @StudentId
WHILE @@FETCH_STATUS = 0
BEGIN
WITH AttendanceCodeMaster AS
(SELECT
[dbo].[Students].StudentNo,
CAST(CONVERT(date,[dbo].[CourseOfferingSchedule].ClassDate,101) as DATETIME) + CAST(CONVERT(time,dbo.CourseOfferingSchedule.ClassStartTime,101) AS DATETIME) as ClassDate,
[dbo].[CourseOfferingAttendanceScheduled].AttendanceCode
FROM [dbo].[CourseOfferingAttendanceScheduled]
INNER JOIN [dbo].[Students] on [dbo].[CourseOfferingAttendanceScheduled].StudentNo = [dbo].[Students].StudentNo
INNER JOIN dbo.[CourseOfferingSchedule] on [dbo].[CourseOfferingAttendanceScheduled].ScheduleID = [dbo].[CourseOfferingSchedule].ScheduleID
INNER JOIN [dbo].[StudentStatus] on [dbo].[Students].StudentStatusID = [dbo].[StudentStatus].StudentStatusID
where
[dbo].[Students].StudentNo = @StudentId and StudentStatus = 'Active' and Complete = 'Y'
),
RunGroup AS
(SELECT StudentNo,ClassDate, AttendanceCode, (SELECT COUNT(*) From AttendanceCodeMaster as G WHERE G.AttendanceCode <> GR.AttendanceCode AND G.ClassDate <= GR.ClassDate) as RunGroup
FROM AttendanceCodeMaster as GR),
AbsenceStreaks AS
(SELECT
StudentNo,
AttendanceCode,
MIN(ClassDate) as StartDate,
MAX(ClassDate)as EndDate,
COUNT(*) as '# of Classes'
FROM RunGroup
where AttendanceCode = 'A'
GROUP BY StudentNo,AttendanceCode, RunGroup),
LongestStreak AS
(SELECT TOP 1 * FROM AbsenceStreaks
Order BY '# of Classes' Desc)
INSERT INTO @Results SELECT * FROM LongestStreak
FETCH NEXT
FROM @getStudentId INTO @StudentId
END
CLOSE @getStudentId
DEALLOCATE @getStudentId
SELECT * from @Results
where "# of Classes" >= 30
order by StudentNo
什麼是你的問題究竟? – WendiKidd
提示1:使用別名和縮進來使代碼更易於閱讀。 –
注意!謝謝! –