SQL基于多列判断行唯一性 首次记录标1重复标0
按指定列分组标记首条唯一记录的SQL实现
核心实现逻辑是使用窗口函数ROW_NUMBER(),按指定的4个判定列分区,按主键升序排序确定记录出现顺序,组内第一条记录标记为1,其余标记为0即可。
实现代码
注意:以下写法适配MySQL,列名带空格、使用关键字作为别名时用反引号包裹,其他数据库可根据语法替换标识符(SQL Server用方括号
[]、PostgreSQL/Oracle用双引号"")
SELECT `Primary Key`, StoreID, InventoryID, CheckoutID, `Postal Code`, UserID, CASE WHEN ROW_NUMBER() OVER ( PARTITION BY InventoryID, CheckoutID, `Postal Code`, UserID ORDER BY `Primary Key` ASC ) = 1 THEN 1 ELSE 0 END AS `unique` FROM 你的测试表名;
逻辑说明
PARTITION BY InventoryID, CheckoutID,Postal Code, UserID:按照需求指定的4个列做分组,列值完全一致的记录会被分到同一组做重复判定ORDER BYPrimary KeyASC:因为主键是自增序列,主键值越小代表记录写入越早,按主键升序排序可以准确拿到组内首次出现的记录ROW_NUMBER()函数会给同组内的记录从1开始按顺序生成连续序号,序号为1的就是组内首条记录,赋值1;其余序号大于1的为组内重复记录,赋值0,最终输出和给出的样例结果完全匹配。
内容的提问来源于stack exchange,提问作者Sinamate
相关产品推荐
相关产品推荐

