【问题标题】:postgres select top 10 records per user [duplicate]postgres为每个用户选择前10条记录[重复]
【发布时间】:2019-05-21 10:39:23
【问题描述】:

假设我有一个 user_data 表,其中包含多条用户记录。

id       user_id  col1    col2  created_at
1        1        abc     x     2019-01-04
2        2        def     x     2019-02-01
3        3        ghi     x     2019-03-05
4        2        jkl     x     2019-07-07
5        2        mno     x     2019-06-01
6        3        pqr     x     2019-07-11

现在我想在单个查询中为每个用户选择前 10 条最新记录。

【问题讨论】:

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


    【解决方案1】:

    使用row_number():

    select ud.*
    from (select ud.*,
                 row_number() over (partition by user_id order by created_at desc) as seqnum
          from user_data ud
         ) ud
    where seqnum <= 10;
    

    【讨论】:

    • 好的。由于内部查询首先获取所有记录,如果 user_data 表很大,是否会影响性能。如果是,那么我应该通过在循环中使用 limit 子句分别为每个用户获取前 10 条记录。
    • @JohnWick 。 . .这应该比执行单独查询的外观更快。
    猜你喜欢
    • 2010-09-15
    • 2020-03-12
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多