Return 多个 Table 加入的最大日期
Return Max Dates from Multible Table Join
我有三个table:
客户端
cid name
----------- --------------------
1 Abe
2 Bill
3 Charlie
客户访问
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
我需要创建一个输出,returns Eval 的最大日期,如果不存在则为 NULL:
Results
----------- -------------------- -------------------- ----------
1 Abe Eval 01/10/2015
2 Bill NULL NULL
3 Charlie Eval NULL
今天早些时候,我 运行 遇到了类似的问题,只有两个 table 并且能够使用类似于以下的查询解决问题:
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
现在我必须做同样的事情,只是我要在三个 table 中而不是两个中做,而且我的思想会爆炸。更糟糕的是,我想我将不得不这样做三次,每次服务一次。我现在尽量保持简单,如何从多对多连接 table 中获取最大日期?
试试这个:
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
我有三个table:
客户端
cid name
----------- --------------------
1 Abe
2 Bill
3 Charlie
客户访问
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
我需要创建一个输出,returns Eval 的最大日期,如果不存在则为 NULL:
Results
----------- -------------------- -------------------- ----------
1 Abe Eval 01/10/2015
2 Bill NULL NULL
3 Charlie Eval NULL
今天早些时候,我 运行 遇到了类似的问题,只有两个 table 并且能够使用类似于以下的查询解决问题:
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
现在我必须做同样的事情,只是我要在三个 table 中而不是两个中做,而且我的思想会爆炸。更糟糕的是,我想我将不得不这样做三次,每次服务一次。我现在尽量保持简单,如何从多对多连接 table 中获取最大日期?
试试这个:
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