使用 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 = 10548
和SubscriberKey = 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;
我是运行下面这个查询。
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 = 10548
和SubscriberKey = 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;