我完全重寫我的問題來簡化它。對不起,如果你閱讀以前的版本。 (這個問題的前一個版本包含一個非常複雜的查詢示例,它創建了我真正需要的分心。)我正在使用SQL Express。正在運行Tally的SQL Sum和Group By?
我有一張課。
LessonID StudentID StudentName LengthInMinutes
1 1 Chuck 120
2 2 George 60
3 2 George 30
4 1 Chuck 60
5 1 Chuck 10
這些將按日期排序。 (當然,實際的表格是包含日期和其他課程相關數據的數千條記錄,但這是一種簡化。)
我需要查詢此表,以便獲取所有行(或行的子集範圍或學生),但我需要我的查詢添加一個新的列,我們可能會調用PriorLessonMinutes。也就是說,只有在PRIOR日期的課程中,同一個學生的所有課程的所有分鐘的總和。
所以查詢將返回:
LessonID StudentID StudentName LengthInMinutes PriorLessonMinutes
1 1 Chuck 120 0
2 2 George 60 0
3 2 George 30 60 (The sum Length from row 2 only)
4 1 Chuck 60 120 (The sum Length from row 1 only)
5 1 Chuck 10 180 (The sum of Length from rows 1 and 4)
從本質上說,我需要先教訓分鐘,每個學生的總和的流水賬。理想情況下,計數器不應包含當前行,但如果是這樣,沒有什麼大不了的,因爲我可以在接收查詢的代碼中進行減法。
此外,(這很重要)如果我只檢索一部分記錄(例如日期範圍)PriorLessonMinutes必須是一個認爲不返回的行的總和。
我的第一個想法是使用SUM()和GROUP BY Student,但這是不對的,因爲除非我誤認爲它會包括每個學生所有行的總和,包括所有行的總和該行與我所需要的總和無關。我可以掃描我的代碼中接收它的所有行(儘管這會迫使我不必要地檢索所有行),但這顯然是效率低下的。我也可以在其中放入一個真實的數據字段並填充它,但這也會在其他記錄被刪除或更改時出現問題。
我不知道如何一起寫這樣的查詢。任何指導?
你檢查了我的代碼嗎? – Sukanya 2012-01-31 06:18:16
我還沒有檢查過,但請注意,當你輸入你的答案時,我完全重寫了我的問題。對於那個很抱歉。 – PaulOTron2000 2012-01-31 06:18:51
好吧,我已經檢查過了。當然,它有點像我最初編寫的問題,它有加入,而不是上面顯示的內容。 (我可以處理連接問題。)它包含GetDate,它與當前日期無關,因爲每個課程都有其自己的日期字段,因此無論執行何時,相同的查詢都會產生相同的結果。謝謝你。 – PaulOTron2000 2012-01-31 06:26:29