【问题标题】:GroupBy (MS SQL Server vs MySQL)GroupBy(MS SQL Server 与 MySQL)
【发布时间】:2021-06-03 15:25:08
【问题描述】:

我和这个人有类似的问题: GROUP BY (MySQL vs SQL server)

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) 但它没有返回正确的值。并且在 GroupBy 子句中添加它也无法返回正确的值。

这是我想要的结果:

SubscriberKey EmailAddress CreateDate
email@address.com email@address.com August 21, 2018

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

SubscriberKey EmailAddress CreateDate Status
email@address.com email@address.com August 21, 2018 active
Jadfsok134324 email@address.com May 15, 2020 active

【问题讨论】:

  • 您的查询无效,预计会引发异常。在较新的 MySQL 版本中也会这样做——除非在兼容模式下。

标签: sql group-by salesforce-marketing-cloud


【解决方案1】:

在这两个数据库中,您将使用相关子查询或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;

【讨论】:

  • 这很有帮助。如果我想获取所有记录并且只通过唯一的电子邮件返回怎么办?我的最终目标是在数据库中找到所有唯一的电子邮件,并返回创建日期最早的电子邮件。然后我可以将其用作子查询来删除所有其他记录,因为这些记录是重复的。
  • @Martin。 . .您将删除 where 子句。这是你的逻辑。我没有添加它。
猜你喜欢
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 2021-12-28
  • 2013-06-12
  • 1970-01-01
  • 2021-11-06
  • 2017-01-29
  • 2022-01-12
相关资源
最近更新 更多