【问题标题】:how to pick the latest data in postgresql如何在 postgresql 中选择最新数据
【发布时间】:2020-06-22 23:30:10
【问题描述】:

我想用文件中的最新记录查询我的数据库。当我尝试这个时:

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()
    );

您可以在 uuid 列中有多个重复的 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

【问题讨论】:

    标签: sql postgresql date greatest-n-per-group


    【解决方案1】:

    如果你想要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 
    

    【讨论】:

    • 但是如果我想要所有具有最新 ts = 2020-03-10 22:29:57 的 uuid 怎么办
    • 我要最新日期对应的所有数据
    猜你喜欢
    • 2015-08-30
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2017-11-02
    相关资源
    最近更新 更多