一条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实现不重复的数据怎么实现
...全文
642 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
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语句可以实现吗?

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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