[英]Extract a max value from a query with joins
我有一個查詢,它給了我部分冗余的行。 這是查詢:
select r.id, u.reminder_id, r.name, r.remark, u.user_id
from REMINDER_USERS u
inner join REMINDER r
on r.id = u.reminder_id
inner join DEVICE d
on d.id = (regexp_replace(r.origin_values, '[^0-9]', ''))
where r.name like '%Interne%'
REMINDER
和REMINDER_USERS
之間存在外鍵約束。 所以REMINDER
中的行是REMINDER_USERS
的子數據。
以下是查詢結果的示例:
線 | ID | REMINDER_ID | 姓名 | 評論 | 用戶身份 |
---|---|---|---|---|---|
1 | 1940 | 1940 | 互聯網_3324 | 內審 | 10 |
2 | 1940 | 1940 | 互聯網_3324 | 內審 | 11 |
3 | 1972年 | 1972年 | 互聯網_2379 | 內審 | 10 |
4 | 1972年 | 1972年 | 互聯網_2379 | 內審 | 11 |
5 | 1934年 | 1934年 | 互聯網_3324 | 內審 | 10 |
6 | 1934年 | 1934年 | 互聯網_3324 | 內審 | 11 |
7 | 3103 | 3103 | 互聯網_3324 | 內審 | 10 |
8 | 3103 | 3103 | 互聯網_3324 | 內審 | 11 |
9 | 4100 | 4100 | 互聯網_2379 | 內審 | 10 |
10 | 4100 | 4100 | 互聯網_2379 | 內審 | 11 |
我想要做的是消除所有行,但這些行具有ID
或REMINDER_ID
的最大值。 在示例中,僅保留名稱為“Interne_3324”的提醒的第 7 行和第 8 行以及名稱為“Interne_2379”的提醒的第 9 行和第 10 行。
我在第一次加入時嘗試了幾個帶有select (max)id
的子查詢,但這不起作用。
非常感謝任何幫助,在此先感謝!
我認為您可以使用dense_rank()
或rank()
以及一些額外的過濾:
select r.*
from (select r.id, u.reminder_id, r.name, r.remark, u.user_id,
dense_rank() over (order by u.reminder_id desc) as seqnum
from REMINDER_USERS u join
REMINDER r
on r.id = u.reminder_id join
DEVICE d
on d.id = (regexp_replace(r.origin_values, '[^0-9]', ''))
where r.name like '%Interne%' and
r.name <> 'Interne_2379'
) r
where seqnum = 1;
注意:如果您確實想要每個用戶最近的提醒,請使用:
dense_rank() over (partition by u.user_id order by u.reminder_id desc) as seqnum
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.