使用其中一个表的最大值连接表
Joining tables by using the maximum value of one of the tables
我很难在 ID 列上连接两个 table 和 EVNT_SEQ 的最大值。例如,我有 table 个用户,我想查看他们最近的操作。 evnt_tbl 为每个用户事件添加一行。我想编写一个查询 returns 所有用户及其最近的事件(EVNT_SEQ 的最大值)。
数据库版本: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)
使用派生的 table 获取事件 table 中每个 ID 的最大值。然后将结果加入到人 table.
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
测试
我很难在 ID 列上连接两个 table 和 EVNT_SEQ 的最大值。例如,我有 table 个用户,我想查看他们最近的操作。 evnt_tbl 为每个用户事件添加一行。我想编写一个查询 returns 所有用户及其最近的事件(EVNT_SEQ 的最大值)。
数据库版本: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)
使用派生的 table 获取事件 table 中每个 ID 的最大值。然后将结果加入到人 table.
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
测试