Как сгруппировать данные по нескольким столбцам, чтобы id не задваивались из-за разных значений в другом столбце?
Как можно изменить этот sql-запрос
select DISTINCT id, result, max (time)
from Table
GROUP BY id, result
Чтобы он выводил это:
id result max (time)
1 10 100
2 9 90
3 8 80
4 5 50
А не это:
id result max (time)
1 10 100
2 9 90
3 8 80
3 7 70
3 6 60
4 5 50
То есть в столбце Result хранятся несколько разных значений, для нескольких записей id3. Мне необходимо получить максимальное значение времени, т.е. в поле result должно быть 8, а в time 80.
Как можно переписать запрос? Желательно простыми командами (без оконных функций например First Value).
Увы, но это вывод максимального результата, поэтому это не подойдет. Мне необходимо максимальная дата, а результат - тот который соответствует дате.
Например если в таблице будут такие данные:
id Result Time
3 4 80
3 6 60
То Ваш запрос покажет в колонке Результат число 6, а не 4:
id Result Time
3 6 80
Вот например аналог с оконными функциями и 2умя таблицами. Как бы написать тоже самое, только просто?
SELECT DISTINCT t.id
, FIRST_VALUE(t2.result) OVER(PARTITION BY t.id ORDER BY t2.time desc) LastResult
, FIRST_VALUE(t2.time) OVER(PARTITION BY t.id ORDER BY t2.time desc) LastTime
from Table t
join Table2 t2 on t2.id = t.id
ORDER BY t.id;
Перепроверил. Приношу извинения, я ошибся. Важное уточнение: не первичный ключ id, а именно внешний ключ. То есть столбцы такие: FID, Result, Time.
Группировать по id конечно же нет смысла.
Таблица одна, но группировка идет по FID.
Агрегируем время, надо получить не это: