Я хочу получить строку для группы с минимальным значением в два столбца.
У меня есть таблица, в которой есть списки нужных мне предметов, а также их стоимость и расстояние до меня.
mytable:
item | cost | dist
-----+------+---------
1 | $2 | 1.0
1 | $3 | 0.5
1 | $4 | 2.0
2 | $2 | 2.0
2 | $2 | 1.5
2 | $2 | 4.0
2 | $8 | 1.0
2 | $12 | 3.0
3 | $1 | 5.0
Для каждого элемента я хочу получить строку с минимальной стоимостью, а затем, если кратно минимальной стоимости, получить строку с минимальным расст
, чтобы мой результат был
item | cost | dist
-----+------+---------
1 | $2 | 1.0
2 | $2 | 1.5
3 | $1 | 5.0
Я знаю, что могу достичь этого результата, используя
SELECT *
, ROW_NUMBER() OVER(PARTITION BY item ORDER BY cost ASC, dist ASC) as [RID]
FROM mytable
WHERE [RID] = 1
, но проблема возникает, когда у меня 100 000 элементов каждый с 100 000 списков, и сортировка всей таблицы становится невероятно трудоемкой.
Поскольку мне нужны только первые 1 в каждой группе, мне интересно, есть ли другой способ получить желаемый результат без сортировки всей таблицы из 10 000 000 000 записей.
В настоящее время используетсяSQL Server 2012