2016-06-20 3 views
0

У меня есть таблица с двумя столбцами a и b, где a - идентификатор, а b - метка времени. Мне нужно выбрать все элементы a, которые отличаются друг от друга, но я забочусь только о самой последней строке на ID.Postgres select different based on timestamp

I.e. Мне нужен способ выбора условных условных значений b.

Есть ли способ сделать это, используя DISTINCT ON в postgres?

Приветствия

+3

'выберите отличие от (а), б от the_table порядка по а, б desc'? –

+0

Самые последние: 'select * from ztable t, где не существует (выберите * из ztable x, где x.a = t.a и x.b> t.b);' – joop

+0

a_horse_with_no_name - будет ли заказ применяться до или после DISTINCT? @joop, не могли бы вы объяснить, как это работает, и я буду отмечать его как принятый. – JMzance

ответ

3

Как @a_horse_with_no_name предполагает, раствор

SELECT DISTINCT ON (a) a, b FROM the_table ORDER BY a, b DESC 

В the manual говорит,

Обратите внимание, что "первая строка" из набора непредсказуема, если запрос сортируется на достаточном количестве столбцов, чтобы гарантировать уникальное упорядочение строк , поступающих в фильтр DISTINCT. (DISTINCT ON обработка происходит после того, как ORDER BY сортировки.)