2016-01-31 4 views
3

Так нормально, если я хотел взять последние из каждого типа в этой таблице:Выберите запись со второй наиболее поздней датой

type | date 
----------------- 
    A | 2008-07-06 
    B | 2014-08-02 
    A | 2009-12-27 
    A | 2004-03-01 
    B | 2008-10-17 
    B | 2015-01-01 

Я бы сделать это:

SELECT DISTINCT ON (type) type, date 
FROM t 
ORDER BY type, date DESC; 

Но что если я хочу получить не последнее, но второе последнее? Итак:

type | date 
----------------- 
    A | 2008-07-06 
    B | 2014-08-02 

ответ

0

вы можете использовать максимум вместо отчетливого, порядка:

SELECT type,max(date) from t group by type 
+0

Там другие вещи в строке что я хочу. Но в любом случае, как мне получить не максимальный, а следующий снизу от max - не самая последняя дата, а вторая - самая последняя? –

+0

других элементов, вы можете добавить их в список по группе. для второго вам нужен вложенный запрос. 'select * from (выберите * from order by .. desc limit 2) order by asc limit 1' –

Смежные вопросы