2017-01-11 9 views
0

я ищу способ сравнения строк в таблице:Сравнение строк с условиями

Пример 1

ID  StartDate  TerminationDate 
1   01.01.2010 NULL 
1   01.01.2011 NULL 
1   05.01.2011 NULL   
1   01.01.2017 NULL  
2   01.01.2010 31.12.2010 
2   01.01.2011 NULL 
2   05.01.2011 NULL   
2   01.01.2017 NULL 
3   01.01.2010 31.12.2011 
3   01.01.2011 31.12.2011 
3   05.01.2011 NULL 
3   01.01.2017 NULL 
4   01.01.2010 31.12.2011 
4   01.01.2011 31.12.2011 
4   05.01.2015 NULL 
4   01.01.2017 NULL 

Результат:

ID  StartDate  
1   01.01.2010 
2   01.01.2011 
3   01.01.2010 
4   05.01.2015 

Если нет TerminationDate не дается для ID , Я бы хотел отобразить минимум StartDate. В этом случае 01.01.2010.

Для идентификатора 2, однако, имеется задание TerminationDate. В этом случае мне нужно проверить, будет ли второй StartDate> первым TerminationDate (01.01.2011> 31.12.2010). Если второй StartDate> first TerminationDate и второй TerminationDate являются либо Null, либо> Third StartDate, то я хочу показать 01.01.2011. В противном случае я бы проверял следующий StartDate таким же образом.

Идентификатор можно рассматривать как клиент, каждый из которых соответствует контракту. Пока по крайней мере один контракт состоит, я хочу первый StartDate. ID 4 будет примером того, где контракт между 31.11.2011 и 05.01.2015 не заключен. Поэтому минимум StartDate - 05.01.2015.

Надеюсь, у вас возникла идея моего вопроса. Заранее спасибо!

ответ

0

Это первая половина вашего решения, использующая GROUP BY и COALESCE. Надеюсь, этого достаточно, чтобы вы начали.

 SELECT 
      [id], 
      [NewDate] = COALESCE(date1, MIN(date2)) 
     FROM 
      TheTable 
     GROUP BY 
      [id] 
     ORDER BY 
      [id] 
+0

Я отредактировал свое первое сообщение, потому что мне кажется, что он не был на 100% понятным, что я ищу. – Gallanz