如何去掉重复项
简单去掉重复行我会操作,但是稍微复杂一点的就迷糊了,现问题如下:
单表如下(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
也就是去掉了第三条记录,同时结果集中还要包含其他所有字段值。
对这个数据库去重原理不太明白,能说明去重原理的更好,谢谢啦。
[解决办法]
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'GUARANTEE')BEGIN DROP TABLE GUARANTEEENDGOCREATE TABLE GUARANTEE( PRODUCT_TYPE INT, MODELNAME VARCHAR(100), AFFIXNAME VARCHAR(100), AFFIXSNAME VARCHAR(100), FIXDATE VARCHAR(10), FIXMAN VARCHAR(10), AFFIXID INT)INSERT INTO GUARANTEESELECT 1,'','语音盒','HD1600BBQ','2012-01-01','安装老大',2 UNIONSELECT 0,'龙翰16','','','2011-12-08','测试老大',NULL UNIONSELECT 0,'长江S300','','','2011-12-01','测试老大',NULL UNIONSELECT 1,'','油量检测','','2011-12-01','测试老四',3 UNIONSELECT 1,'','卸料检测','HD1702XLS','2011-12-01','我饿uife',5SELECT * FROM GUARANTEE AS TWHERE (SELECT COUNT(*) FROM GUARANTEE WHERE ISNULL(t.AFFIXID,0) = ISNULL(AFFIXID,0) AND FIXDATE > T.FIXDATE) < 1PRODUCT_TYPE MODELNAME AFFIXNAME AFFIXSNAME FIXDATE FIXMAN AFFIXID0 龙翰16 2011-12-08 测试老大 NULL1 卸料检测 HD1702XLS 2011-12-01 我饿uife 51 油量检测 2011-12-01 测试老四 31 语音盒 HD1600BBQ 2012-01-01 安装老大 2
[解决办法]
去重就是删除多余的数据,但前提是你找出正确的数据来。然后:
delete from ... where not exists ...