2010-08-03 54 views
3

我有這樣的SQL簡單MS SQL計數問題

DECLARE @url varchar(100) 
SET @url = 'http://mysite.com/%' 

SELECT 
[UserSessionSequenceID] 
     ,[SiteID] 
     ,[Referer] 
     ,[Timestamp] 
,ROW_NUMBER() over (PARTITION BY [Referer] ORDER BY referer DESC) AS sort 
    FROM [tblSequence] 
WHERE [Referer] IS NOT NULL AND [Referer] NOT LIKE @url AND siteID = 15 

要算獨特的引用者 - 問題是,這個SQL返回所有比賽和計數的一個接一個。 我只想要每個唯一引用者的計數(並且仍然像使用@url一樣)。

如何做到這一點?

回答

3
SELECT 
     [Referer], Count([Referer]) as RefCount 
    FROM [tblSequence] 
WHERE [Referer] IS NOT NULL AND [Referer] NOT LIKE @url AND siteID = 15 
GROUP BY [Referer] 

把訂單恢復(應該真的需要)取決於您的確切要求。

+0

看起來不錯 - 如果我想在整個添加[時間戳] where子句是什麼? AND([Timestamp]> DATEADD(dd,-1,(LEFT(GETDATE(),12)))) – 2010-08-03 13:15:24

+1

這是我的第一個想法,但後來我意識到OP在一次調用中需要唯一的引用計數和未集合的行數據。對不起,我以前的錯別字... – gbn 2010-08-03 13:22:07

+0

Seo20 - 請指出你是否在尋找像gbn這樣的答案,或者像我這樣做的聚合。我懷疑gbn的方法更多是你想要的。但是,僅僅添加您剛纔在評論中提供的WHERE語句會阻礙什麼? (在任一解決方案中) – Tobiasopdenbrouw 2010-08-03 13:45:02

3

使用DENSE_RANK not ROW_NUMBER如果需要行的數據,而不是總

+0

在您發佈的查詢中將「ROW_NUMBER()」更改爲「DENSE_RANK()」 – gbn 2010-08-03 13:23:32