sql如何高效某列去重唯一查询

huangting0117 2016-08-10 10:48:25
表rpt_action 结构如下
----------------------------------------------------------------
id act_date action_values actor_id
1 2016-06-03 40 1
2 2016-07-07 50 2
3 2016-06-03 60 1
4 2016-07-07 25 3
5 2016-05-06 80 1
---------------------------------------------------------------
我要的查询结果如下
---------------------------------------------------------------
id act_date action_values actor_id
1 2016-06-03 40 1
2 2016-07-07 50 2
4 2016-07-07 25 3
---------------------------------------------------------------
说明:依据actor_id查询唯一的用户参与的最近活动,但是由于act_date被原表设计人员定义到天,那么这样一来actor_id=1的人员在2016-06-03参与了2个活动,则随机取一个。相当于说要考虑2列的重复列。
...全文
1923 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-08-10
  • 打赏
  • 举报
回复
记录第1、3随机取一条
中国风 2016-08-10
  • 打赏
  • 举报
回复
use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#rpt_action') is null
	drop table #rpt_action
Go
Create table #rpt_action([id] int,[act_date] Date,[action_values] int,[actor_id] int)
Insert #rpt_action
select 1,'2016-06-03',40,1 union all
select 2,'2016-07-07',50,2 union all
select 3,'2016-06-03',60,1 union all
select 4,'2016-07-07',25,3 union all
select 5,'2016-05-06',80,1
Go
SELECT * FROM (Select *,ROW_NUMBER()OVER(PARTITION BY [actor_id] ORDER BY [act_date] DESC,NEWID()) AS RN from #rpt_action) AS t WHERE t.RN=1

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧