2017-02-22 13 views
0

Этот сайт ответил на многие вопросы SQL для меня. Наконец подписались, чтобы спросить одного из моих и приступить к работе здесь.Выбор первой даты после даты MIN

В любом случае, я работаю в таблице с Date_Effective и Date_Lapse. Клиент может иметь несколько строк, так что я пытаюсь получить количество дней между Date_Lapse и следующей Date_Effective для одного и того же клиента. Значения даты в этой таблице - это int, которые я буду преобразовывать в даты позже.

Этот код не работает. Мне не нравится второе значение, к которому я присоединяюсь. Почему я не могу заставить его указать min date_effective, что больше, чем каждый date_effective? Если я запустил ниже, я просто не получаю никаких результатов, потому что он видит это, поскольку нет эффективных дат, превышающих минимальную эффективную дату.

SELECT ClientID, c1.Date_Lapse, c2.Date_Effective 
FROM Fact_Episodes c1 
LEFT JOIN (  
      SELECT ClientID, min(Date_Effective) as Date_Effective 
      FROM Fact_Episodes 
      GROUP BY ClientID 
     ) c2 
ON c1.ClientID = c2.ClientID 
AND c2.Date_Effective > c1.Date_Effective 
+1

До того как я пытался это так, я пытался заставить его работать через распределяли номера строк, и я не мог получить его так, что, когда я начал пытаться по датам себя и теперь после того, как я после этого я понял, из того, что я делал неправильно с моим разделением, конечно, спасибо. – Tim

ответ

0

Если вы хотите придерживаться левого соединения, это сработает.

select c1.ClientID, c1.Date_Lapse, min(c2.Date_Effective) as Date_Effective 
from Fact_Episodes c1 
    left join Fact_Episodes c2 
    on c1.ClientID = c2.ClientID 
    and c2.Date_Effective > c1.Date_Effective 
group by c1.ClientId, c1.Date_Lapse 
+0

Это тоже работает. Uuuugh! Спасибо. – Tim

+0

@TimMullender С удовольствием! – SqlZim

+0

Подзапрос для 'c2' не нужен и нежелателен в MySQL. –

 Смежные вопросы

  • Нет связанных вопросов^_^