希望各位路过的大侠 帮小弟一把。感激不尽。
如何查询一张表中两个字段都重复的数据以及每组中的第一条数据的主键?
情况如下:
A表: a1 a2 a3 a4 都列
a1 a2 a3 a4 1 m n o 2 m n k 3 j k l 4 j k o 5 s s s 6 e e g |
要求:查询出A表中a2 a3两个字段同时重复的数据以及每组中的第一条数据的主键a1 结果示例:
a1 a2 a3
1 m n
3 j k
(不知各位大侠能不能明白我的意思?)
对于重复的数据: select a2,a3 from A a group by a2,a3 having count(a1)>=2
但分组后怎么同时把每组中第一条数据的a1也查出来,然后根据这a1查询出表中所有的数据。
不知道你用的是什么数据库,我这有我以前给一个也是提问题的朋友写的,测试可以不过是oracle的语句。
[code="sql"]
select t.a1,t.a2,t.a4 from (select a1,a2,a3,a4, row_number() over (partition by a2,a3 order by a1 asc) as num from a) t where num <2;
[/code]
在sql server中,如果要分组的话就那么分组字段就得显示。
那你的数据如果在sql server中直接一个分组就搞定了。
[code="java"]
select min(id),a2,a3 from a group by a2,a3;
[/code]
如果不加min()的话不能执行,看不到id的。加上就ok了。
select a1,a2,a3 from A a where a1 not in(
select a1 from A a where a2=a3 group by a2
)
没测试哈!大概意思是 select a1 from A a where a2=a3 group by a2
找出重复的然后 分组去掉一个
然后再查