我有這樣的資料
id userid phone
1 1000 11111
2 1001 22222
3 1000 33333
4 1000 44444
5 1001 55555
6 1000 66666
柱電話是獨一無二的
我期待以下結果
position phone
3 44444
我試過 row_number 但它不起作用。
select *,row_number() over
(partition by userid order by id asc) as position
from table
where phone=44444
這種方式位置總是1
uj5u.com熱心網友回復:
row_number()根據WHERE子句應用于結果集。由于您在該結果中只有一條記錄,因此row_number()是1.
您首先需要選擇完整的集合,應用row_number()到它,然后獲取帶有搜索編號的記錄
SELECT position,
phone
FROM (SELECT row_number() OVER (PARTITION BY userid
ORDER BY id ASC) AS position,
phone
FROM elbat) AS x
WHERE phone = 44444;
如果表很大,將派生表的結果限制為具有搜索號碼的用戶的記錄可能會有所幫助。一個索引(phone, userid)和另一個索引(userid, id, phone)可能支持這一點。
SELECT position,
phone
FROM (SELECT row_number() OVER (ORDER BY id ASC) AS position,
phone
FROM elbat
WHERE userid = (SELECT userid
FROM elbat
WHERE phone = 44444)) AS x
WHERE phone = 44444;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/418286.html
標籤:
