我的桌子有很多行(> 10K)。大多数行都有与用户名相关联的重复角色值。
我要做的是按 request_id 添加的不同AND最新角色选择行。
我几乎拥有它,但是我的尾巴部分是 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
有可能为空。
Select distinct values from 1 column | SQL Server : select distinct by one column and by another column value | SQL Server select distinct hell
答案 0 :(得分:12)
max
查询无效,因为您在分组中添加了request_id
- 请尝试:
select distinct uname, role, max(request_id) as request_id
from das_table where uname='jsmith'
group by uname, role
SQLFiddle here。
答案 1 :(得分:1)
似乎ISNULL会解决您的问题,我在这里使用1是为了简单,但如果对您的使用更有意义,可以使用-1。
MAX(ISNULL(request_id, 1))