我有一个有大量行(> 10K)的表。大多数行都有与用户名关联的重复角色值。
我要做的是按request_id添加的不同和最新角色选择行。我几乎拥有它,但让我大吃一惊的部分是某些request_id字段中有值,因为这些请求是在添加该列之前发出的。我仍然需要将它们包括在内,以防用户在更新后没有输入另一个请求。null
select statement
这是我的表结构的示例:
id | uname | role | request_id
0 | jsmith | User | null
1 | jsmith | Admin | null
2 | jsmith | Dude | null
3 | jsmith | Admin | 56
4 | jsmith | Dude | 56
5 | jsmith | Admin | 57
6 | jsmith | Dude | 57
这将是期望的结果:
0 | jsmith | User | null
5 | jsmith | Admin | 57
6 | jsmith | Dude | 57
以下是我迄今为止尝试过的陈述:
加入
select distinct a.uname, a.role, a.request_id from (
select * from das_table
)
b join das_table a on b.role = a.role and b.request_id = a.request_id
where a.uname = 'jsmith'
结果:这消除了request_id =NULL
最大限度()
我猜这对我不起作用,因为MAX()
不计算null
值?
select distinct uname, role, max(request_id) as request_id from das_table where uname='jsmith'
group by uname, role, request_id
我看过的类似问题:
我认为与我研究过的其他问题不同的一个问题是request_id
有可能为空。