GroupBy(MS SQL 服务器与 MySQL)

GroupBy (MS SQL Server vs MySQL)

我和这个人有类似的问题:

SELECT 
    SubscriberKey,
    EmailAddress,
    MIN(CreatedDate) AS CreateDate,
FROM [_ListSubscribers]
WHERE EmailAddress = 'email@address.com'
AND STATUS = 'active'
GROUP BY EmailAddress

如何查看与最旧记录的电子邮件地址关联的 SubscriberKey 是什么? SubscriberKey 是一个 TEXT 字段。我尝试使用 MIN(SubscriberKey) 但它没有 return 正确的值。并且在 GroupBy 子句中添加它也无法 return 正确的值。

这是我想要的结果:

订阅者密钥 电子邮件地址 创建日期
电子邮件@address.com 电子邮件@address.com 2018 年 8 月 21 日

这是此电子邮件记录的完整数据库示例:

订阅者密钥 电子邮件地址 创建日期 状态
电子邮件@address.com 电子邮件@address.com 2018 年 8 月 21 日 活跃
Jadfsok134324 电子邮件@address.com 2020 年 5 月 15 日 活跃

在这两个数据库中,您将使用相关子查询或 row_number():

SELECT l.*
FROM (SELECT l.*,
             ROW_NUMBER() OVER (PARTITION BY emailaddress ORDER BY CreatedDate DESC) as seqnum
      FROM [_ListSubscribers] l
      WHERE EmailAddress = 'email@address.com' AND STATUS = 'active'
     ) l
WHERE seqnum = 1;

当然,如果您只需要一行,那么 fetch first 在任一数据库中都更容易:

SELECT l.*
FROM [_ListSubscribers] l
WHERE EmailAddress = 'email@address.com' AND STATUS = 'active'
ORDER BY createdAt ASC
OFFSET 0 ROW FETCH FIRST 1 ROW ONLY;