2015-01-13 2 views
0

У меня есть три таблицы:Return Max Дата из многодисковой Таблицы Регистрации

Client

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 

Мне нужно создать выходной сигнал, который возвращает дату MAX в течение Eval и 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

Возможно, вы упростили свои таблицы и оставили кое-что, но, глядя на него логически, Approved_On является атрибутом визита, так почему бы не это поле в таблице VisitApproval ? – TommCatt

ответ

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 
+0

Я мог бы поцеловать тебя! Я не уверен, чего я пропустил, но это все. Теперь, чтобы объединить его в мой большой запрос ... –

+0

Ха-ха! Или вы могли бы принять мой ответ. знак равно –