sql - Postgresql 查询基于 2 列过滤最新数据
问题描述
表结构优先
users table
ID |
---|
1 |
2 |
3 |
sites table
ID |
---|
1 |
2 |
site_memberships table
site_id | 用户身份 | 创建于 |
---|---|---|
1 | 1 | 1 |
1 | 1 | 2 |
1 | 1 | 3 |
2 | 1 | 1 |
2 | 1 | 2 |
1 | 2 | 2 |
1 | 2 | 3 |
假设 created_on 数字越高,最新的记录
Expected Output
site_id | 用户身份 | 创建于 |
---|---|---|
1 | 1 | 3 |
2 | 1 | 2 |
1 | 2 | 3 |
预期输出:我需要每个站点成员的每个用户的最新记录。
尝试了以下查询,但这似乎不起作用。
select * from users inner join
(
SELECT ROW_NUMBER () OVER (
PARTITION BY sm.user_id,
sm.created_on
), sm.*
from site_memberships sm
inner join sites s on sm.site_id=s.id
) site_memberships
ON site_memberships.user_id = users.user_id where row_number=1```
解决方案
我认为您将要解决的问题过于复杂化了。
你似乎想要聚合:
select site_id, user_id, max(created_on)
from site_memberships sm
group by site_id, user_id;
如果您有其他想要的列,则可以distinct on
改用:
select distinct on (site_id, user_id) sm.*
from site_memberships sm
order by site_id, user_id, created_on desc;
推荐阅读
- ios - 如何从 touchesMoved 方法获得准确的 CGpoint 以在场景视图上绘制 UIBezierpath?
- python-3.x - 如何在for循环中遍历多个字符串变量?
- c# - 转换/转换为 SuperType 方差
- c++ - 指针输出的虚拟值
- c# - 尝试优化 linq 查询
- python - 最大素数的最快解决方案
- mysql - 如何从具有多对多关系的表中选择最新记录
- android - 找不到 com.android.tools.build:gradle:5.1.1
- postgresql - 外部值在数据库中作为空白插入。如何解决这个问题?
- android - 有一个库,我使用 react-native-pie 进行饼图聊天