Как выбрать уникальные записи по условию?

Есть таблица, вот пример:

email   carrier id  date
email_1 car_1   1   2019-02-08
email_1 car_1   1   2019-02-09
email_1 car_1   2   2019-02-10
email_1 car_2   2   2019-02-11
email_2 car_3   3   2019-02-09
email_2 car_4   4   2019-02-09

С этой таблице мне нужну выбрать уникальные записи. Критерием уникальности будет следующее: Если внутри одного email-а, значение в поле carrier уникальное и значение в поле id уникальное, то такая запись будет уникальной. Значение поле date не должно влиять на уникальность записи. Можем выводить первую при сортировке по дате уникальную запись по дате. Результат должен быть вот такой:

email   carrier id  date
email_1 car_1   1   2019-02-08
email_1 car_2   2   2019-02-11
email_2 car_3   3   2019-02-09
email_2 car_4   4   2019-02-09

DISTINCT не подойдет, так как при его использовании, любое изменение в колонке есть критерием уникальности записи. Как сделать такой запрос? Запрос буду выполнять в BigQuery, но подойдет и пример на SQL :) Спасибо


Ответы (2 шт):

Автор решения: Akina
SELECT email, carrier, id, MIN(d_date) AS date
FROM test
GROUP BY email, carrier, id

fiddle for MySQL

fiddle for PostgreSQL

→ Ссылка
Автор решения: Aziz Umarov
with test(email, carrier, id,  date) AS (
    SELECT 'email_1', 'car_1',   1,   '2019-02-08'
    UNION ALL
    SELECT 'email_1', 'car_1',   1,   '2019-02-09'
    UNION ALL
    SELECT 'email_1', 'car_1',   2,   '2019-02-10'
    UNION ALL
    SELECT 'email_1', 'car_2',   2,   '2019-02-11'
    UNION ALL
    SELECT 'email_2', 'car_3',   3,   '2019-02-09'
    UNION ALL
    SELECT 'email_2', 'car_4',   4,   '2019-02-09'
), 
data AS (
    SELECT  
        email, carrier, id,  date, 
        row_number() over(partition by email, carrier, id ORDER BY date desc) AS RowNumber -- добавьте сортировку какую вам нужно и партишен такой какой вам нужен чтоб начать отсчет
    FROM test
)
SELECT email, carrier, id,  date FROM data WHERE RowNumber = 1
→ Ссылка