Как выбрать уникальные записи по условию?
Есть таблица, вот пример:
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
Автор решения: 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