sql - 选择最后 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?
提前谢谢你,我对数据库查询很陌生。
解决方案
您需要一个额外的列,在其中指定用户第 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)
推荐阅读
- python - 编码后连接数据帧
- database - 如何为已删除的文件创建实体
- python - Python imaplib fetch 返回“无法解析命令”错误
- python-3.x - 使用 pandas 在 python 中导入数据
- python - 使用 capiq-python 包时出现错误(JSONDecodeError: Expecting value: line 1 column 1 (char 0))
- python - 如何使用 Keras 神经网络分类器绘制 KFold 交叉验证中每个折叠的 ROC_AUC 曲线
- java - Corretto 8 中的 Jcontrol 等效项
- python - Discord.py 存储和输出记录/警告
- python - 在对象检测问题中获取 len(dataset) = 0
- r - 每行 Shapiro-Wilk 测试