簡體   English   中英

通過使用表之一的最大值聯接表

[英]Joining tables by using the maximum value of one of the tables

我很難連接ID列上的兩個表和EVNT_SEQ的最大值。 例如,我有一個充滿用戶的表,我想查看他們的最新操作。 evnt_tbl為每個用戶事件添加一行。 我想編寫一個查詢,以返回所有用戶及其最近的事件(EVNT_SEQ的MAX)。

數據庫版本:IBM DB2 9.7.8

person_tbl

ID    NAME
1     Ben
2     Joe
3     Jane
4     Albert
5     Paul

evnt_tbl

ID    EVNT_SEQ    EVNT_NM
1     1           NULL
1     2           max
2     1           NULL
2     2           NULL
2     3           max
3     1           max
4     1           NULL
4     2           max
5     1           NULL
5     2           max

所需的查詢結果

ID    NAME     EVNT_SEQ    EVNT_NM
1     Ben      2           max
2     Joe      3           max
3     Jane     1           max
4     Albert   2           max
5     Paul     2           max

我以為可以寫類似下面的內容,但出現錯誤:

SELECT person.ID, person.NAME, evnt.EVNT_SEQ, evnt.EVNT_NM
FROM person_tbl person
LEFT JOIN evnt_tbl evnt ON person_tbl.ID = evnt.ID
    AND evnt.EVNT_SEQ = (SELECT MAX(EVNT_SEQ) 
                             FROM event_tbl evnt2 
                             WHERE evnt.ID = evnt2.ID)

使用派生表獲取事件表中每個id的最大值。 然后將結果加入人員表。

select t.id, p.name, t.maxevseqm, t.maxevnum
from (SELECT ID, max(EVNT_SEQ) as maxevseq, max(EVNT_NM) as maxevnum
      FROM event_tbl
      group by id) t
join person_tbl on p.id = t.id
select
  p.id, p.name, e.EVNT_SEQ, e.EVNT_NM
from 
  person_tbl p
inner join
  evnt_tbl e
on 
  p.id = e.id and e.EVNT_SEQ =
  (
  select MAX(EVNT_SEQ)
  from evnt_tbl xe
  where xe.id = p.id
  ) 

經過SQLFIDDLE測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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