Посмотрите на это:
DECLARE @myTable AS TABLE (ID INT, Time_to_complete INT);
INSERT INTO @myTable
VALUES (1, 5)
, (1, 7)
, (1, 8)
, (2, 23)
, (2, 6)
, (3, 7)
, (4, 16)
, (4, 14);
WITH cte AS
(SELECT *
, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Time_to_complete) AS RN
FROM @myTable)
SELECT cte.ID
, cte.Time_to_complete
FROM cte
WHERE RN = 1;
Результаты:
ID Time_to_complete
----------- ----------------
1 5
2 6
3 7
4 14
Используются номера строк над группами, затем выбирается первая строка для каждой группы.Вы должны быть в состоянии настроить свой код, чтобы использовать эту технику.Если вы сомневаетесь, сначала оберните весь запрос в cte, а затем примените эту технику здесь.
Стоит ознакомиться с этим процессом, поскольку он используется во многих местах - особенно в отношении дедупликации данных.