GroupBy (MS SQL Server против MySQL)

У меня похожая проблема с этим человеком: 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 - это ТЕКСТОВОЕ поле. Я пробовал использовать MIN (SubscriberKey), но он не возвращает правильное значение. И добавление его в предложение GroupBy также не возвращает правильного значения.

Вот результат, который я хочу:

Ключ подписчика Адрес электронной почты CreateDate
email@address.com email@address.com 21 августа 2018 г.

Это полный пример БД для этой записи электронной почты:

Ключ подписчика Адрес электронной почты CreateDate Статус
email@address.com email@address.com 21 августа 2018 г. активный
Jadfsok134324 email@address.com 15 мая 2020 г. активный

Всего 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;

Есть идеи?

10000