mysql - 在 SQL 中使用 NOT 子句检测相同值下的重复记录时,没有收到任何输出

标签 mysql sql if-statement duplicates

我是 SQL 新手,并试图了解如何查找列中不同值中是否存在相似字段:

我的代码:

WITH LOC_CTE AS
(SELECT DISTINCT fa.AccountKey, dce.EmailAddress , dcp.Phone , dpo.BrandName, dpo.BrandId
FROM Fact.Account fa
LEFT JOIN Dim.PetOwner dpo ON dpo.PetOwnerKey = fa.PetOwnerKey
LEFT JOIN Dim.RatingAddress dra ON dra.RatingAddressKey = fa.RatingAddressKey
LEFT JOIN Dim.CustomerEmail dce ON dce.CustomerEmailKey = fa.CurrentCustomerEmailKey
LEFT JOIN Dim.CustomerPrimaryPhone dcp ON dcp.CustomerPrimaryPhoneKey = fa.CurrentCustomerPrimaryPhoneKey
)


SELECT * FROM (
SELECT  LOC_CTE.*
   ,row_number() over (partition by EmailAddress,Phone,BrandId order by BrandName) as seqnum
      from LOC_CTE
           ) Q
where seqnum >= 1;

输出给了我:

AccountKeyEmailAddress  Phone     BrandName BrandId seqnum
389082  0160150@m**.edu   2098579**    AP       4   1
430223  01co***st**e@msn.com8655677**9  AP      4   1
430224  01cor**s**e@msn.com 8655677**9  AP      4   2
531443  01mar**01@gmail.com 73278**63   AP      4   1
544454  01mu**rmyra@gmail.com 8133**793 AP      4   1
548374  03b**y13@gmail.com  30130**93   AP      4   1
216594  03d**ado@gmail.com  50363**34   AP      4   1
377919  03d**ado@gmail.com  50363**734  AP      4   2
486237  03d**ado@gmail.com  50363**734  HP      3   3
532010  041**hen@gmail.com  85749**455  AP      4   1
365925  05bla**ro*e21@gmail.com 682365**51  AP  4   1
365926  05bla**ro*e21@gmail.com 682365**51  HP  3   2

从我的输出中可以看出,我能够检测重复的记录及其重复的顺序。但我想要的是,我的最终报告还可以检测同一个人(电子邮件和电话号码)是否在不同品牌下重复出现。例如,如果您注意到输出的最后两行是同一个人,但属于 2 个不同的品牌和品牌 ID。但我只想隔离这些实例并生成一个输出,该输出仅显示原始副本以及不同品牌/brandID 下出现的副本。我该怎么做?

我尝试编辑子句的最后一行并集成 NOT 子句,但我没有收到任何输出,也没有收到任何错误。我的语法可能是错误的,但希望这有助于逻辑

where seqnum >= 1 AND NOT BrandID = BrandID ;

最佳答案

这是一种方法:

select *
from (select LOC_CTE.*,
             row_number() over (partition by EmailAddress,Phone,BrandId order by BrandName) as seqnum,
             min(brandid) over (partition by EmailAddress, Phone) as min_brandid,
             max(brandid) over (partition by EmailAddress, Phone) as max_brandid
      from LOC_CTE
           ) Q
where seqnum >= 1 and  -- this condition is useless
      min_brandid <> max_brandid;

关于mysql - 在 SQL 中使用 NOT 子句检测相同值下的重复记录时,没有收到任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59989077/

相关文章:

sql - 案例陈述和答案的除法始终为零

mysql - SQL 查询中的 JOIN 运算符未返回预期结果

mysql - SQL - 查找重复项

mysql - 计算 SQL 查询中的总行数

sql - 首次运行后 Access 删除查询的 SQL 内容

java - 多个条件的 if 方法出错

java - fix34codingbat java——为什么这不起作用?

java - 在 IF 条件中使用 NOT 运算符

mysql - 主表和事务表之间有什么关系?

Mysql Windows "mysqldump -t"恢复