如何去掉重复项

笨狗熊 2012-05-18 09:56:08
简单去掉重复行我会操作,但是稍微复杂一点的就迷糊了,现问题如下:
单表如下(GUARANTEE):
字段:PRODUCT_TYPE MODELNAME  AFFIXNAME  AFFIXSNAME  FIXDATE  FIXMAN  AFFIXID
记录:
    1       ''      语音盒   HD1600BBQ   2012-01-01 安装老大  2
0      龙翰16     ''     ''      2011-12-08 测试老大  NULL
0      长江S300    ''     ''      2011-12-01 测试老大  NULL
1       ''      油量检测  ''      2011-12-01 测试老四  3
1       ''      卸料检测 HD1702XLS   2011-12-01 我饿uife  5

需求:去掉AFFIXID重复的行(值为null或数字相同就算重复,按FIXDATE降序排列,重复行保留FIXDATE最大值的行)后得到如下结果集

    1             语音盒   HD1600BBQ   2012-01-01 安装老大  2
0      龙翰16                 2011-12-08 测试老大  NULL
1             油量检测         2011-12-01 测试老四  3
1             卸料检测 HD1702XLS  2011-12-01 我饿uife  5
也就是去掉了第三条记录,同时结果集中还要包含其他所有字段值。
对这个数据库去重原理不太明白,能说明去重原理的更好,谢谢啦。
...全文
92 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
笨狗熊 2012-05-18
  • 打赏
  • 举报
回复
很少考虑到性能啊、优化的问题。有看过介绍比较null 是个比较消耗资源的过程,单不理解深层原因。
刚才等待回复的过程中,在论坛搜索了一下,我这样类似问题都的帖子还真的不好。。。
  • 打赏
  • 举报
回复
去重就是删除多余的数据,但前提是你找出正确的数据来。然后:
delete from ... where not exists ...


另外NULL是不能比较的,虽然你可以 isnull(null,newid()),但还是建议给AFFIXID设置一个默认值0,这样对于优化也比较好

慎用NULL
孤独加百列 2012-05-18
  • 打赏
  • 举报
回复

IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'GUARANTEE')
BEGIN
DROP TABLE GUARANTEE
END
GO
CREATE TABLE GUARANTEE
(
PRODUCT_TYPE INT,
MODELNAME VARCHAR(100),
AFFIXNAME VARCHAR(100),
AFFIXSNAME VARCHAR(100),
FIXDATE VARCHAR(10),
FIXMAN VARCHAR(10),
AFFIXID INT
)
INSERT INTO GUARANTEE
SELECT 1,'','语音盒','HD1600BBQ','2012-01-01','安装老大',2 UNION
SELECT 0,'龙翰16','','','2011-12-08','测试老大',NULL UNION
SELECT 0,'长江S300','','','2011-12-01','测试老大',NULL UNION
SELECT 1,'','油量检测','','2011-12-01','测试老四',3 UNION
SELECT 1,'','卸料检测','HD1702XLS','2011-12-01','我饿uife',5

SELECT * FROM GUARANTEE AS T
WHERE (SELECT COUNT(*) FROM GUARANTEE WHERE ISNULL(t.AFFIXID,0) = ISNULL(AFFIXID,0) AND FIXDATE > T.FIXDATE) < 1

PRODUCT_TYPE MODELNAME AFFIXNAME AFFIXSNAME FIXDATE FIXMAN AFFIXID
0 龙翰16 2011-12-08 测试老大 NULL
1 卸料检测 HD1702XLS 2011-12-01 我饿uife 5
1 油量检测 2011-12-01 测试老四 3
1 语音盒 HD1600BBQ 2012-01-01 安装老大 2

34,588

社区成员

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

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