0
У меня есть таблица в БД Postgres, который имеет следующую структуру:Выбор строки после нескольких группировок в Postgres
id | date | groupme1 | groupme2 | value
----------------------------------------
1 |
2 |
3 |
Теперь я хочу добиться следующего:
- Группировка таблицы после того, как groupme1 и groupme2
- Получите значение для каждой группы
- Но только последняя запись для каждого объединения групп (отложенная после даты)
Пример:
id | date | groupme1 | groupme2 | value
---------------------------------------
| | A | 1 | 4
| | A | 2 | 7
| | A | 3 | 3
| | B | 1 | 9
Мой текущий подход выглядит следующим образом:
SELECT a.*
FROM table AS a
JOIN (SELECT max(id) AS id
FROM table
GROUP BY groupme1, groupme2) AS b
ON a.id = b.id
Проблемы этого подхода:
- это asumes, что более высокие даты имеют более высокий идентификатор
- Длительность
Есть ли более быстрый и лучший способ сделать это? Может ли функция окна работать с этим?
Оба решения работают. Это самый быстрый способ? Запуск второго по дате из базы данных из 7000 строк занимает 4,8 секунды. – Xlaech
Вторая версия, вероятно, самая быстрая, и индекс на 't (groupme1, groupme2, date desc)' будет делать это быстрее. –