簡體   English   中英

從帶有連接的查詢中提取最大值

[英]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%'

REMINDERREMINDER_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

我想要做的是消除所有行,但這些行具有IDREMINDER_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM