注册 登录
编程论坛 SQL Server论坛

表中连续重复字段保留1个记录,是连续重复,不连续的重复保留。

techcai 发布于 2021-04-09 15:55, 6009 次点击
比如表a
姓名
---------------
王五
王五
王五
李三
王五
赵四
田强
田强
李三

查询后结果期望是:
姓名
---------------
王五
李三
王五
赵四
田强
李三


sql的select语句怎么写?谢谢回复。
9 回复
#2
techcai2021-04-09 16:39
没有人?
select语句怎么写?谢谢回复。
#3
techcai2021-04-09 16:42
就是上一条记录和下一条记录的姓名字段比较,如相等就丢弃一条。
#4
techcai2021-04-10 08:36
那位专家给个提示?非常感谢。
#5
techcai2021-04-10 18:19
表中连续重复字段保留1个记录,是连续重复,不连续的重复保留。
比如表a
姓名
---------------
王五
王五
王五
李三
王五
赵四
田强
田强
李三

查询后结果期望是:
姓名
---------------
王五
李三
王五
赵四
田强
李三


sql的select语句怎么写?谢谢回复。
#6
techcai2021-04-11 12:48
这个对我来说有点难,高手应当不费吹灰之力。

在线等。
#7
techcai2021-04-11 18:50
SELECT 姓名 FROM 表a as a
WHERE EXISTS
(SELECT 姓名 FROM 表a as b WHERE a.姓名 <> b.姓名)
可不可以实现
#8
techcai2021-04-13 09:13
先抛开sql语法不谈,这里说一下我的问题解决思路
例:
原表 AAABBACCADD,去除连续重复后,期望结果 :ABACAD
方法:
1,取第一条记录A与第二条记录A比较,相等,抛弃第二条记录,
         第一条记录A与再第三条记录A比较,相等,抛弃第三条记录,
         第一条记录A与再第四条记录B比较,不相等,保留第一条记录A,这时,
2,取第四条记录B与地五条记录B比较,相等,抛弃第五条记录,
         第四条记录B与再第六条记录A比较,不相等,保留第四条记录B,这时,
3,取第六条记录A与第七条记录C比较,不相等,保留第六条记录A,这时,
4,取第七条记录C与第八条记录C比较,相等,抛弃第五条记录,
         第七条记录C与第九条记录A比较,不相等,保留第七条记录C,这时,
5,取第九条记录A与第十条记录D比较,不相等,保留第九条记录A,这时,
6,取第十条记录D与第十一条记录D比较,相等,抛弃第十一条记录,
         第十条记录D与第十二条记录比较时遇到记录结尾,不相等,保留第十条记录D,结束

结果集为:ABACAD
#9
mywisdom882021-04-14 08:46
重复,分局部重复和完全重复
局部重复:有N个字段,只有某些字段内容相同,通常,只考虑重要字段
完全重复:就是所有字段内容相同
如:表1(字段1,字段2,字段3,字段4,字段5,字段6)
局部重复:字段1,字段2
select distinct 字段1,字段2 from 表1
去掉“字段1,字段2”重复的内容,保留唯一的,
全部重复:
select distinct 字段1,字段2,字段3,字段4,字段5,字段6 from 表1
#10
oldfish962021-04-25 10:51
要加字段id
程序代码:
DECLARE @t TABLE( id INT, name VARCHAR(10))

INSERT @t
VALUES
( 1, '王五' ),
( 2, '王五' ),
( 3, '王五' ),
( 4, '李三' ),
( 5, '王五' ),
( 6, '赵四' ),
( 10, '田强' ),
( 15, '田强' ),
( 18, '李三' )

SELECT * FROM @t AS T
--第一种
DECLARE @th TABLE( rank1 INT, id INT, name VARCHAR(10))
INSERT @th SELECT ROW_NUMBER() OVER ( ORDER BY T.id ), T.id, T.name FROM @t AS T

SELECT  A.id, A.name
    FROM @th A
         LEFT JOIN @th B ON B.rank1 - 1 = A.rank1
    WHERE A.name <> B.name
          OR B.name IS NULL
--第二种
DECLARE @th2 TABLE( id INT, name VARCHAR(10), GroupKey VARCHAR(20))
INSERT @th2
    SELECT *,
           CONCAT(
               ROW_NUMBER() OVER ( ORDER BY T.id ) - ROW_NUMBER() OVER ( PARTITION BY T.name ORDER BY T.id ),
               '|',
               T.name) groupkey
        FROM @t AS T
--SELECT * FROM @th2 AS T

SELECT MAX(T.id) id, MAX(T.name) name FROM @th2 AS T GROUP BY GroupKey ORDER BY id

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2021-4-25 13:52编辑过]

1