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

Нужно оставить только первые строки по вхождению занчения city_id Допустим есть следующая таблица table.

id city_id sum
1 1 10
2 1 20
3 1 30
4 2 20
5 2 30

Ожидаемый результат:

id city_id sum
1 1 10
4 2 20

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

Автор решения: Vitaliy Zlobin

В таких случаях помогают оконные функции, а именно ROW_NUMBER().

Пишу на MS SQL, в других диалектах функция может называться по-другому(не проверял):

SELECT  id,
        city_id,
        "sum"
FROM
(
    SELECT  id,
            city_id,
            "sum",
            ROW_NUMBER() OVER(PARTITION BY city_id ORDER BY id) AS NUM
    FROM TableName
) AS Subquery
WHERE NUM = 1
→ Ссылка