使用 window 函数对记录分组进行排序并选择最小值时如何删除重复项?

How to remove duplicates when using window function to sort groupings of records and selecting minimum value?

我是运行下面这个查询。

WITH CTE_Sort
AS (
    SELECT COUNT(*) OVER (
            PARTITION BY sendid
            ,subscriberkey
            ) AS aggregates
        ,*
    FROM xtemp.[Stage_Clicks_marketing]
    )
SELECT ROW_NUMBER() OVER (
        PARTITION BY eventdate ORDER BY eventdate DESC
        ) AS datesort
    ,aggregates
    ,sendID
    ,subscriberkey
    ,eventdate
FROM CTE_Sort
GROUP BY aggregates
    ,sendID
    ,subscriberkey
    ,eventdate

这return是这组数据。

每个唯一分组均按 sendid 和 subscriberkey 的组合排序,聚合列说明此记录出现的次数。我想 select 仅按最早的可能日期进行单独分组,当前结果集 return 多个日期,所有其他列都具有相同的值。如何将我的查询格式设置为 return 每个分组只有 1 条可能具有最早日期的记录?

例如上图中的第一个分组SendID = 10548SubscriberKey = 0032L000016loZeQAI。我只想return记录与EventDate = 2020-11-18 17:28:12.0000000。最旧的日期。我不想 return 编辑旧日期之后的附加日期。

如果 我在字里行间读得正确,那么您需要将 ROW_NUMBER 表达式放在 CTE 中,然后在外部 WHERE。但是,这是未经测试的,因为问题仅包含文本图像:

WITH CTE_Sort AS(
    SELECT COUNT(*) OVER (PARTITION BY sendid,subscriberkey) AS aggregates,
           ROW_NUMBER() OVER (PARTITION BY sendid,subscriberkey ORDER BY eventdate DESC) AS RN,
           sendID,
           subscriberkey,
           eventdate
    FROM xtemp.[Stage_Clicks_marketing])
SELECT aggregates,
       sendID,
       subscriberkey,
       eventdate
FROM CTE_Sort
WHERE RN = 1;