从多表连接返回最大日期

时间:2015-01-13 01:19:49

标签: sql sql-server tsql

我有三张桌子:

客户端

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

现在我必须做同样的事情,除了我在三张桌子而不是两张桌子上做这件事,我的思绪会爆炸。更糟糕的是,我认为我将不得不这样做三次,每次服务一次。我现在试图保持简单,如何从多个连接表中获取最大日期?

1 个答案:

答案 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