首页 新闻 会员 周边

求SQL语句的写法

0
悬赏园豆:30 [已解决问题] 解决于 2016-02-23 21:17

数据库:MSSQL,需要实现同一用户,同一分类的数据只读取一条。并要显示id和所有其他列。

如数据库结构:

id(编号)      uid(用户ID)    cid(分类ID)  其他列

1                   1                     1

2                   1                     2

3                   1                     1

4                   2                     1

5                   2                     1

要读取出来为:

id(编号)      uid(用户ID)    cid(分类ID)

1                   1                     1

2                   1                     2

4                   2                     1

问题补充:

目前使用的是变通的方式,在数据表里面新增一列,存 uid和cid的组合然后在读取的时候,利用新增的这一列进行筛选去重。

沙万的主页 沙万 | 初学一级 | 园豆:195
提问于:2016-02-13 16:44
< >
分享
最佳答案
0

标准的分类汇总取row_number为1的数据。

如下可以参考:

select * from (
  select *, rownum = row_number() over partiton by uid,cid order by id
) as t
where t.rownum = 1;
收获园豆:12
幻天芒 | 高人七级 |园豆:37175 | 2016-02-15 11:15

我sql小白,一会儿去试试,谢谢!

沙万 | 园豆:195 (初学一级) | 2016-02-15 17:06

@浮世左巴: :)

幻天芒 | 园豆:37175 (高人七级) | 2016-02-16 10:43
其他回答(6)
0

group by 不行吗?

收获园豆:3
Jession. | 园豆:96 (初学一级) | 2016-02-13 21:13

感谢回答!

支持(0) 反对(0) 沙万 | 园豆:195 (初学一级) | 2016-02-15 07:22
0

以你的结果来看可以先分组(uid,cid),再取小(min(id))

收获园豆:6
怎样疯狂的涛涛 | 园豆:116 (初学一级) | 2016-02-14 11:09

目前就是采用这种变通的方式解决的。但是问题还在于要读取其他列,并且在筛选的时候,min(id)也是临时的,还有专门的排序字段。

支持(0) 反对(0) 沙万 | 园豆:195 (初学一级) | 2016-02-15 07:21

@浮世左巴: 那可以再考虑使用合适的方法找到准确的记录后,再关联原表取其他的列

支持(0) 反对(0) 怎样疯狂的涛涛 | 园豆:116 (初学一级) | 2016-02-15 09:30
0

group by uid,cid

飞翔の金雕 | 园豆:364 (菜鸟二级) | 2016-02-14 12:29

还需要读取其他的列!

支持(0) 反对(0) 沙万 | 园豆:195 (初学一级) | 2016-02-15 07:18
0

select * from 表 where id in(select max(id) from 表 group by uid,cid)

收获园豆:6
Rich.T | 园豆:3440 (老鸟四级) | 2016-02-15 09:42

感谢,目前就是用的这个语句!

支持(0) 反对(0) 沙万 | 园豆:195 (初学一级) | 2016-02-15 17:05
0

用distinct关键字

峰和日丽 | 园豆:110 (初学一级) | 2016-02-16 10:30
0

select * from 表 group by uid,cid  这样不行吗  

收获园豆:3
年久失修 | 园豆:224 (菜鸟二级) | 2016-02-19 10:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册