2013-10-17 45 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