2012-09-05 45 views
0

我正在使用以下腳本來嘗試計算在您上次訪問組和現在之間在我們的系統上創建的新評論和新討論的數量。我寫了下面的,但不能得到它的工作:SQL查找日期間的活動

SELECT TOP(6) a.GroupID , a. GroupName, sbuser.sf_NewGroupActivity(a.GroupID ,b.LastVisited) AS NumberUpdates 
FROM Groups a 
INNER JOIN GroupMembers b ON b .GroupID = a.GroupID 
WHERE b. MemberID = 102 
GROUP BY a.GroupID , a.GroupName, b.LastVisited 
ORDER BY NumberUpdates ASC 

和SF腳本如下:

RETURNS INT 
AS 
    BEGIN 
    DECLARE @OUTSTR INT 
    DECLARE @OUT1 INT 
    DECLARE @OUT2 INT 
    SET @OUT1 = (SELECT CAST(COUNT(GroupDiscussionsID) AS INT) FROM GroupDiscussions 
      WHERE MemberID = @GroupID AND CreateDate BETWEEN @LastVisited AND GetDate()) 
    SET @OUT2 = (SELECT CAST(COUNT(GroupCommentID) AS INT) FROM GroupComments 
      WHERE MemberID = @GroupID AND CreateDate BETWEEN @LastVisited AND GetDate()) 
    SET @OUTSTR = @OUT1 + @OUT2 
    RETURN @OUTSTR 
    END 

我在一個不知如何得到這個榜前6按更新次數更新的組。任何想法,建議或解決方案將不勝感激。非常感謝

neojakey

+1

您的意思是DESC而不是ASC? – GilM

+2

你的男人「不能得到它的工作」?問題是什麼? –

+0

當我運行腳本,我得到所有返回爲零,我知道有更新.. – neojakey

回答

1

我相信你的問題是在WHERE子句中您的功能:

WHERE MemberID = @GroupID AND . . . 

推測,這應該是比較Membe rID或GroupIds,但不是彼此。

但是,我強烈建議您刪除函數調用併爲計數創建單個查詢。這允許SQL創建更好的執行計劃。如果你想這樣做,但不知道如何,請發表另一個問題。

+0

謝謝戈登,我忽略了標量函數中的代碼行,我想我太累了,不能發現它..非常感謝您的幫助。 1分給你..! – neojakey

0

如果你想在6與更新,而不是至少,改變ASC到DESC:

ORDER BY NumberUpdates DESC