как выбрать последние данные в postgresql - PullRequest
0 голосов
/ 11 марта 2020

Я хочу запросить в моей базе данных последнюю запись в файле. Когда я пытаюсь это сделать:

select distinct(ts) from my_table

я получаю две даты:

2020-03-10 22:54:08
2020-03-10 22:29:57

моя схема БД:

Create table my_table
    (
        uuid text NULL,
        portfolio_family_id bigint NULL,
        ticker text NULL,
        size double precision NULL,
        secid bigint NULL,
        portfolio_name_id bigint NULL,
        ts timestamp NOT NULL DEFAULT now()
    );

вы можете иметь несколько повторяющихся uuids в uuid колонка. Я хотел бы получить все строки, где ts - последние данные. Как бы я запросить это?

select to_char(ts,'YYYY-MM-DD HH24:MI:SS') ts2 from my_table mt
inner join (select to_char(max(ts),'YYYY-MM-DD HH24:MI:SS') t2 from 
my_table) c2 on c2.t2 = mt.ts2

Я получаю сообщение об ошибке: столбец TS2 не существует. Подсказка: возможно, вы имеете в виду ссылку на mt: ts?

Я хочу, чтобы все записи, относящиеся к этой дате: 2020-03-10 22: 29: 57

1 Ответ

1 голос
/ 11 марта 2020

Если вам нужна последняя строка для uuid, то:

select distinct on (uuid) *
from mytable
order by uuid, ts desc

Если вы хотите, чтобы все строки, которые соответствуют самой последней дате, были доступны в таблице, то:

select t.*
from mytable t
where t.ts = (select max(t1.ts) from mytable t1)

Вы можете получить тот же результат с оконными функциями:

select (s.t).*
from (select t, rank() over(order by ts desc) rn from mytable t) s
where rn = 1 
...