大量の行 (>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()
MAX()
値をカウントしないため、これはうまくいきませんでしたnull
か?
select distinct uname, role, max(request_id) as request_id from das_table where uname='jsmith'
group by uname, role, request_id
私が見た同様の質問:
私が調査した他の質問とは異なると思う私の質問の1つの注意点は、request_id
nullになる可能性があることです。
1 列から個別の値を選択| SQL Server : 1 つの列と別の列の値で個別に選択する| SQL Server は異なる地獄を選択します