一条sql语句实现不重复数据获取

啾啾我 网站建设  2017-12-05 09:02:43

select * from (
select [Id],[Mid],[Recommend],[Tops],[Click],[CreateTime],ids=ROW_NUMBER()
over(partition by Recommend,Tops order by CreateTime desc) from Product
where Mid in (5,6,7,13,14,16,17,18) and ([Recommend]>0 or Tops>0) and [Status]>0
)a where (ids<=2 and Mid in (5,6,7,14,16,17,18)) or (ids<=2 and Mid=13) or (ids<=1 and Tops>0)
order by CreateTime,ids desc

需求:
1、获取Mid=5,6,7,14,16,17,18的2条数据
2、获取Mid=13的2条数据
3、获取Tops>0的一条数据
一条sql实现不重复的数据怎么实现
...全文
439 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zjcxc 元老 2017-12-05
--1、获取Mid=5,6,7,14,16,17,18的2条数据 select top 2 * from tb where Mid in (5,6,7,14,16,17,18) union -- 2、获取Mid=13的2条数据 select top 2 * from tb where Mid=13 union --3、获取Tops>0的一条数 select top 1 * from tb where Tops>0
  • 打赏
  • 举报
回复
zjcxc 元老 2017-12-05
union 是去重复的,如果还是重复,那是你选出来的字段中有你不想要的,你可以把这些字段去掉,或者放在聚合函数中,比如 select distinct 你需要的不能生蚝的字段, min(不重复但不是你要包吃住的不重复字段_这里取最小一个) from( --1、获取Mid=5,6,7,14,16,17,18的2条数据 select top 2 * from tb where Mid in (5,6,7,14,16,17,18) union -- 2、获取Mid=13的2条数据 select top 2 * from tb where Mid=13 union --3、获取Tops>0的一条数 select top 1 * from tb where Tops>0 ) data
  • 打赏
  • 举报
回复
啾啾我 2017-12-05
引用 3 楼 zjcxc 的回复:
我那就是一条啊,select ... union select ... 难道算多条了?
这样做会有重复数据的,有办法避免掉吗?
  • 打赏
  • 举报
回复
zjcxc 元老 2017-12-05
我那就是一条啊,select ... union select ... 难道算多条了?
  • 打赏
  • 举报
回复
啾啾我 2017-12-05
引用 1 楼 zjcxc 的回复:
--1、获取Mid=5,6,7,14,16,17,18的2条数据 select top 2 * from tb where Mid in (5,6,7,14,16,17,18) union -- 2、获取Mid=13的2条数据 select top 2 * from tb where Mid=13 union --3、获取Tops>0的一条数 select top 1 * from tb where Tops>0
这样会有重复的数据的,一条sql语句可以实现吗?
  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server
加入

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2017-12-05 09:02
社区公告
暂无公告