我有三张桌子:
客户端
cid name
----------- --------------------
1 Abe
2 Bill
3 Charlie
ClientVisit
vid cid service
----------- ----------- --------------------
100 1 Eval
101 1 Eval
102 2 Consult
103 3 Eval
VisitApproval
aid vid approved_on
----------- ----------- -----------
90 100 12/01/2014
91 101 01/10/2015
92 102 02/12/2015
93 103 NULL
94 104 03/12/2014
我需要创建一个输出,返回Eval的MAX日期,如果不存在则返回NULL:
Results
----------- -------------------- -------------------- ----------
1 Abe Eval 01/10/2015
2 Bill NULL NULL
3 Charlie Eval NULL
今天早些时候我遇到了类似的问题,只有两个表,并且能够使用类似下面的查询来解决问题:
SELECT c.cid ,
c.name ,
CONVERT(VARCHAR(10), MAX(COALESCE(ce1.period_end, '1999-09-09')), 101) AS Auth_End
FROM Clients AS c
INNER JOIN ClientEpisode ce1 ON c.client_id = ce1.client_id
LEFT OUTER JOIN ClientEpisode ce2 ON c.client_id = ce2.client_id
AND ce1.episode_id < ce2.episode_id
现在我必须做同样的事情,除了我在三张桌子而不是两张桌子上做这件事,我的思绪会爆炸。更糟糕的是,我认为我将不得不这样做三次,每次服务一次。我现在试图保持简单,如何从多个连接表中获取最大日期?
答案 0 :(得分:2)
试试这个:
SELECT
c.cid,
c.name,
cv.service,
max_date = CONVERT(VARCHAR(10), MAX(va.approved_on), 101)
FROM Client c
LEFT JOIN ClientVisit cv
ON c.cid = cv.cid
AND cv.service = 'Eval'
LEFT JOIN VisitApproval va
ON va.vid = cv.vid
GROUP BY
c.cid, c.name, cv.service