首页 > 解决方案 > 选择最后 100 个条目,每个唯一用户 ID 最多 3 个条目

问题描述

我有以下要求,让所有艺术品内部加入他们的用户信息:

SELECT a.*, row_to_json(u.*) as users 
FROM artworks a INNER JOIN users u USING(address) 
WHERE (a.flag != "ILLEGAL" OR a.flag IS NULL) 
ORDER BY a.date DESC 
LIMIT 100

我怎么能有相同的查询,但每个用户不超过 3 个条目?

每个用户都有一个唯一的 ID,称为“地址”

我认为 DISTINCT ON 仅适用于每个用户 1 个,可能是 ROW_NUMBER?

提前谢谢你,我对数据库查询很陌生。

标签: sqlnode.jspostgresql

解决方案


您需要一个额外的列,在其中指定用户第 n 次出现在表中。这看起来像这样:

USER  | N
user1 | 1
user1 | 2
user1 | 3
user2 | 1
user2 | 2

可以使用以下代码在新表中获取额外的列

    --Create new Table as T
            WITH T AS (
        SELECT TOP 100 
        a.*, 
        row_to_json(u.*) as users,
        ROW_NUMBER() OVER(PARTITION BY u.user ORDER BY a.date DESC) AS N  
        FROM artworks a INNER JOIN users u USING(address) 
        WHERE (a.flag != "ILLEGAL" OR a.flag IS NULL)  )



--Select columns from your new table       
        SELECT columns from T
        WHERE (T.N =1 OR T.N =2 OR T.N =3) 
         

                  

推荐阅读