2015-10-15 3 views
0

Если у меня есть набор данных следующим образом:SQL (для Teradata)

1/01/2014 a 
2/01/2014 a 
3/01/2014 a 
4/01/2014 b 
5/01/2014 b 
6/01/2014 b 
7/01/2014 b 
8/01/2014 a 
9/01/2014 a 
10/01/2014 a 
11/01/2014 a 
12/01/2014 a 
13/01/2014 a 

Как бы я получить вывод, который выглядит следующим образом:

letter min  max 
a 1/01/2014 3/01/2014 
b 4/01/2014 7/01/2014 
a 8/01/2014 13/01/2014 
+0

Что делать, если между датами существует разрыв. '6/01/2014' отсутствует? Вы все еще хотите вернуть 'b 4/01/2014 7/01/2014' или' b 4/01/2014 5/01/2014' плюс 'b 7/01/2014 7/01/2014'? – dnoeth

+0

И какой у вас релиз Teradata? – dnoeth

ответ

1

Teradata поддерживает функции окна. Вам нужно рассчитать идентификатор группы. Одним из способов является различие номеров строк:

select letter, min(date), max(date) 
from (select t.*, 
      (row_number() over (order by date) - 
       row_number() over (partition by letter order by date) 
      ) as grp 
     from t 
    ) t 
group by letter, grp; 
Смежные вопросы