2013-10-17 91 views
1

我有一個日誌捕捉用戶在我的網站上的操作;這會在主頁上顯示給用戶。操作可以添加頁面,喜歡的網頁,更新網頁的形式等SQL分組和連接

「約翰·史密斯更新了測試頁」

我一直要求團這些動作,所以不是二十個不同的對於在同一天更新同一頁面項,它會顯示一個條目:

「約翰·史密斯和二十人已經更新了測試頁」

理想的情況下顯示的名稱將是最後一個人來執行該操作,所以如果其他人更新了同一頁,那麼在同一天它會顯示爲:

我不想「史蒂夫·瓊斯和21人的測試頁面已經更新了」將所有類型的這樣的行動,只有一些。不同的觀點(例如約翰史密斯將會看到「你」而不是「約翰史密斯」)被存儲在一個單獨的表格中更加複雜。

我一直在努力想看看我將如何通過SP實現這一點,並想知道這是否合理?我可以在後面的代碼中完全看到.net的代碼,所以也許我應該採取這種方法?

您的想法非常受歡迎。

回答

1

窗口功能將幫助你! :)你可以做這樣的事情:

with cte as (
    select 
     *, 
     row_number() over(partition by page_id order by date asc) as rn, 
     count(*) over(partition by page_id) as cnt 
    from tasks 
) 
select 
    user_name + isnull(' and ' + cast(nullif(cnt - 1, 0) as nvarchar(max)) + ' others', '') + ' ' + 
    case 
     when action = 'update' then 'updated' 
    end + ' this page (id: ' + cast(page_id as nvarchar(max)) + ')' 
from cte 
where rn = 1 

=> sql fiddle demo一些測試用例。如果只有一個其他用戶等,您可以進一步修改它,將「其他」更改爲「其他」。

+0

謝謝你,看起來很好生病看看這個,看看它是如何發展的 – DavidB