Фильтр повторяющихся значений по условию SQL

Есть таблица:

Когда каждый owner_id владел машиной car_id - начало и окончания владения

Мне надо чтобы осталось первые строчки: это когда owner_id владел своей первой машиной, дальше повторения - это вторая по счету машина во владении. Я сортирую по start_date- первые 3 строчки не повторяются, остальные надо отбросить.

SELECT owner_id, car_id FROM car_owner_period ORDER BY start_date

Как сделать условие?

результат


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

Автор решения: Yitzhak Khabinsky

Пожалуйста, попробуйте следующее решение. Это для MS SQL Server.

SQL

-- DDL и образец вставки данных, начало
DECLARE @tbl TABLE (
    ID INT IDENTITY PRIMARY KEY, 
    car_id INT,
    owner_id INT,
    [start_date] DATE
);
INSERT INTO @tbl (car_id, owner_id, [start_date]) VALUES
(1, 1, '2016-04-12'),
(1, 2, '2016-10-17'),
(1, 3, '2016-12-19'),
(15, 2, '2016-04-12'),
(34, 3, '2016-04-12'),
(45, 1, '2016-10-17');
-- DDL и образец вставки данных, конец

;WITH rs AS
(
    SELECT *
        , seq = ROW_NUMBER() OVER (PARTITION BY owner_id ORDER BY [start_date] ASC)
    FROM @tbl
)
SELECT rs.owner_id, rs.car_id 
FROM rs
WHERE seq = 1
ORDER BY rs.owner_id;

Результат

+----------+--------+
| owner_id | car_id |
+----------+--------+
|        1 |      1 |
|        2 |     15 |
|        3 |     34 |
+----------+--------+
→ Ссылка