Как получить несколько результатов от группы в postgres - PullRequest
1 голос
/ 24 сентября 2010

У меня есть таблица с некоторыми данными, которые выглядят так:

id | type | timestamp |
 1 |    1 | 0001      |
 2 |    2 | 0002      |
 3 |    3 | 0003      |
 4 |    2 | 0004      |
 5 |    2 | 0005      |
 6 |    2 | 0006      |
 7 |    2 | 0007      |
 8 |    2 | 0008      |
 9 |    2 | 0009      |
10 |    3 | 0010      |

Мне нужны 5 самых последних для каждого типа, порядок не имеет значения.

id | type | timestamp |
 1 |    1 | 0001      |
 5 |    2 | 0005      |
 6 |    2 | 0006      |
 7 |    2 | 0007      |
 8 |    2 | 0008      |
 9 |    2 | 0009      |
 3 |    3 | 0003      |
10 |    3 | 0010      |

Я предполагаю, что под-выбор, группировка или какое-то объединение в порядке, но я просто не знаю, как его получить.

1 Ответ

2 голосов
/ 24 сентября 2010

Вы можете использовать функцию окна.См. руководство .

Пример:

SELECT id, type, timestamp
FROM
  (SELECT id, type, timestamp,
          rank() OVER (PARTITION BY type ORDER BY timestamp DESC) AS pos
     FROM table
  ) AS t
WHERE pos < 5;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...