SQL查询获取新的重复行

SQL查询获取新的重复行,sql,sql-server,Sql,Sql Server,假设我有这个表结构 User ==== *Id *Email *City *DateCreated 根据这些数据: Id Email City DateCreated 1 eleven@gmail.com Hawkins 01-01-2018 2 jim.hopper@gmail.com Hawkins 01-01-2018 3 mike.wheel

假设我有这个表结构

User
====
*Id
*Email
*City
*DateCreated
根据这些数据:

Id Email                           City         DateCreated
1  eleven@gmail.com                Hawkins      01-01-2018
2  jim.hopper@gmail.com            Hawkins      01-01-2018
3  mike.wheeler@gmail.com          Hawkins      01-01-2018
4  dustin.henderson@gmail.com      Hawkins      01-01-2018
5  eleven@gmail.com                Hawkins      01-01-2021
6  eleven@gmail.com                Pittsburgh   01-01-2021
我想运行一个查询,只返回同一电子邮件和城市的最新重复记录:

5  eleven@gmail.com                Hawkins      01-01-2021

在这种情况下,显示的记录不是重复的,因为城市与ID 5和ID 6不同

但您可能会通过电子邮件和创建日期来执行行数函数和分区


这里有一个很好的例子,在这种情况下,显示的记录不是重复的,因为城市与ID 5和ID 6不同

但您可能会通过电子邮件和创建日期来执行行数函数和分区

下面是一个很好的例子,您可以使用窗口函数来完成

您可以使用窗口函数来完成

您可以使用窗口函数来获得此结果

挑选* 从…起 选择*, 按t.Email划分的行数,按t.DateCreated DESC rn划分的城市顺序, 通过t.Email、t.City cnt对分区进行计数* 从你的桌子上 T 其中t.cnt>1且t.rn=1 如果还需要没有重复的行,请删除计数及其筛选器。

您可以使用窗口函数获得此结果

挑选* 从…起 选择*, 按t.Email划分的行数,按t.DateCreated DESC rn划分的城市顺序, 通过t.Email、t.City cnt对分区进行计数* 从你的桌子上 T 其中t.cnt>1且t.rn=1

如果还需要没有重复的行,请删除计数及其筛选器。

根据什么复制?电子邮件和/或城市和/或日期或@jarlh电子邮件和城市。刚刚相应地更新了问题。您使用的是哪种dbms?microsoft sql Server复制根据什么?电子邮件和/或城市和/或日期或@jarlh电子邮件和城市。刚刚相应地更新了问题。您使用的是哪种dbms?microsoft sql Server谢谢,但我指的是记录1和记录5,其中电子邮件相同,城市相同,但DateCreated不同。那么,行号将非常有效,您可以按日期描述进行分区,最上面的结果将是您的副本。很抱歉,这让我处于同一位置,因为我不熟悉行数。请您详细说明一下好吗?谢谢,但我说的是记录1和记录5,其中电子邮件相同,城市相同,但创建的日期不同。然后,行号会很好地工作,您可以按日期描述进行划分,最高的结果将是您的副本。很抱歉,这让我处于同一位置,因为我不熟悉行号。你能详细解释一下吗?谢谢,但似乎有一个不正确的语法问题,我不想尝试这个。很抱歉,遗漏了逗号和from,这就成功了。谢谢谢谢,但似乎有一个不正确的语法问题,不让我尝试这个。很抱歉,遗漏了逗号和from,这就成功了。谢谢谢谢,但似乎有一个不正确的语法问题,不让我尝试现在修复它。FilteredResult之后缺少AS关键字。谢谢,但似乎有一个不正确的语法问题,不允许我尝试。现在修复了它。FilteredResult后缺少AS关键字。
;WITH FilteredResult AS (
    SELECT 
        Id,
        Email,
        City,
        DateCreated,
        DuplicatedRows  = ROW_NUMBER() OVER(PARTITION BY Email, City ORDER BY Id)
    FROM your_table_name
)
SELECT *
FROM FilteredResult
WHERE DuplicatedRows = 1