我正在尝试返回为特定客户端发布的上次条目,以及与该条目关联的案例(事项)编号。这种关系是一个客户有很多事情,一个问题有很多时间条目。
我有下面的代码,但它显然会返回所有问题,而不仅仅是与时间条目相关联的问题。我理解为什么,但在尝试纠正它时将自己绑在一起。任何帮助非常感谢。
select c.CLIENT_CODE,
c.CLIENT_NAME,
c.OPEN_DATE,
mp.EMPLOYEE_NAME,
MAX(tt.TRAN_DATE)[Last Time],
m.MATTER_NUMBER
from HBM_CLIENT c
join HBM_MATTER m
on m.CLIENT_UNO=c.CLIENT_UNO
left join TAT_TIME tt
on tt.MATTER_UNO=m.MATTER_UNO
left join HBM_PERSNL mp
on mp.EMPL_UNO=c.RESP_EMPL_UNO
where c.STATUS_CODE = 'Targ'
group by c.CLIENT_CODE,
c.CLIENT_NAME,
c.OPEN_DATE,
mp.EMPLOYEE_NAME,
m.MATTER_NUMBER
order by OPEN_DATE
答案 0 :(得分:0)
执行此操作的一种方法是使用row_number()
。我认为以下内容可以满足您的需求:
select c.CLIENT_CODE, c.CLIENT_NAME, c.OPEN_DATE, mp.EMPLOYEE_NAME,
tt.TRAN_DATE as [Last Time], m.MATTER_NUMBER
from HBM_CLIENT c join
(select m.*, tt.TRAN_DATE,
row_number() over (partition by m.CLIENT_UNO
order by tt.TRAN_DATE desc
) as seqnum
from HBM_MATTER m LEFT JOIN
TAT_TIME tt
ON tt.MATTER_UNO = m.MATTER_UNO
) m
ON m.CLIENT_UNO = c.CLIENT_UNO and seqnum = 1 left join
HBM_PERSNL mp
on mp.EMPL_UNO=c.RESP_EMPL_UNO
where c.STATUS_CODE = 'Targ';
我认为您不需要group by
,除非其他联接创建重复项。
答案 1 :(得分:0)
完全未经测试,但方向正确
select
<whatever>
from
HBM_CLIENT c
join HBM_MATTER m on
m.CLIENT_UNO = c.CLIENT_UNO
join TAT_TIME tt on
tt.MATTER_UNO = m.MATTER_UNO AND
tt.tran_date = (
select max(tran_date)
from TAT_TIME
where matter_uno = m.matter_uno)
where
m.CLIENT_UNO = ? and
c.STATUS_CODE = 'Targ'