如何通过 sql 查询去除重复项
How to get rid of duplicate by sql query
我有一个数据库 table,用于存储电子邮件地址数据、加入日期和专栏通讯 (yes/no)。但是,时事通讯栏中有很多具有不同日期和值的重复电子邮件地址。我需要编写 sql 查询来排除那些日期较新的电子邮件(记录),只保留日期最早的记录:
EMAIL DATEJOIN NEWSLETTER
zzzzzzzzzz_@hotmail.com 02/03/2015 0
zzzzzzzzzz_@hotmail.com 30/06/2015 1
vishythamack@hotmail.com 22/09/2012 1
vishysblue@gmail.com 19/09/2012 1
yann-o@hotmail.fr 07/07/2015 0
yannnsheng@hotmail.com 02/03/2015 0
yannnsheng@hotmail.com 22/09/2012 1
thilaxanschool@gmail.com 18/09/2013 1
What I need After Query
EMAIL DATEJOIN NEWSLETTER
zzzzzzzzzz_@hotmail.com 02/03/2015 0
vishythamack@hotmail.com 22/09/2012 1
vishysblue@gmail.com 19/09/2012 1
yann-o@hotmail.fr 07/07/2015 0
yannnsheng@hotmail.com 22/09/2012 1
thilaxanschool@gmail.com 18/09/2013 1
我尝试使用以下内容:
SELECT [EMAIL]
,min([DATEJOIN]) as [DATEJOIN]
, [NEWSLETTER]
FROM [test].[dbo].[first]
group by [EMAIL], [NEWSLETTER]
但是没用。我需要决定如何处理 Newsletter 字段。有什么想法吗?
我建议只查找具有重复值的所有内容并使用某种脚本删除旧值。
SELECT 电子邮件
来自 [测试].[dbo].[第一]
有 count(*) > 1
如果你不想这样做,你可以这样做:
SELECT a.* 从第一个 a
inner join (select email, min(datejoin) as join from first group by email) b
b 在 a.email = b.email 和 a.datejoin = b.datejoin
哪个应该有效。
我有一个数据库 table,用于存储电子邮件地址数据、加入日期和专栏通讯 (yes/no)。但是,时事通讯栏中有很多具有不同日期和值的重复电子邮件地址。我需要编写 sql 查询来排除那些日期较新的电子邮件(记录),只保留日期最早的记录:
EMAIL DATEJOIN NEWSLETTER
zzzzzzzzzz_@hotmail.com 02/03/2015 0
zzzzzzzzzz_@hotmail.com 30/06/2015 1
vishythamack@hotmail.com 22/09/2012 1
vishysblue@gmail.com 19/09/2012 1
yann-o@hotmail.fr 07/07/2015 0
yannnsheng@hotmail.com 02/03/2015 0
yannnsheng@hotmail.com 22/09/2012 1
thilaxanschool@gmail.com 18/09/2013 1
What I need After Query
EMAIL DATEJOIN NEWSLETTER
zzzzzzzzzz_@hotmail.com 02/03/2015 0
vishythamack@hotmail.com 22/09/2012 1
vishysblue@gmail.com 19/09/2012 1
yann-o@hotmail.fr 07/07/2015 0
yannnsheng@hotmail.com 22/09/2012 1
thilaxanschool@gmail.com 18/09/2013 1
我尝试使用以下内容:
SELECT [EMAIL]
,min([DATEJOIN]) as [DATEJOIN]
, [NEWSLETTER]
FROM [test].[dbo].[first]
group by [EMAIL], [NEWSLETTER]
但是没用。我需要决定如何处理 Newsletter 字段。有什么想法吗?
我建议只查找具有重复值的所有内容并使用某种脚本删除旧值。
SELECT 电子邮件 来自 [测试].[dbo].[第一] 有 count(*) > 1
如果你不想这样做,你可以这样做:
SELECT a.* 从第一个 a inner join (select email, min(datejoin) as join from first group by email) b b 在 a.email = b.email 和 a.datejoin = b.datejoin
哪个应该有效。