Calculate period start and end date My table:

Date       Employee     Status
-----------------------------
20171106   001          At work
20171107   001          Sick leave
20171108   001          At work
20171109   001          At work
20171111   001          Sick leave (A gap here)
20171112   001          Sick leave
20171115   001          At work (Another gap)
20171116   001          At work


Desired result:

Employee      Status        StartDT                       EndDT
-------------------------------------------------------------------
001           At work       Some time in the history      20171106
001           Sick leave    20171107                      20171107
001           At work       20171108                      20171109
001           Sick leave    20171111                      20171112
001           At work       20171115                      20171116


The logic: We re-organize the source table by status, not by date. So a gap in date does not matter and should be ignored.

How to do this in Teradata 15?

Note: select min(Date), max(Date) group by employee, status; will not work, as there may be status change between two "At work"s.
The simplest solution normalizes a period:

SELECT NORMALIZE Employee, Status, PERIOD(date,date+1) AS pd
FROM mytable
ORDER BY Employee, pd


NORMALIZE is a very unknown syntax, it combines overlapping periods, you just need to create a one day period out of the date column. As this results in a period you get a slightly different output, the end date is +1 compared to the expected result.

To fix this you can split the period back into seperate columns:

SELECT Employee, Status, Begin(pd), 
   Last(pd) -- last included date, i.e. expected EndDT
FROM
 (
   SELECT NORMALIZE Employee, Status, PERIOD(date,date+1) AS pd
   FROM myTable
 ) AS dt
ORDER BY 1,pd


Getting this Some time in the history is more complicated, would need additional calculations, you should check if you really need it.

Another more classical solution calculates groups of rows with  consecutive values:

SELECT Employee, Status, Min(date), Max(date)
FROM
 (
   SELECT Employee, Status, date, 
   -- this is the tricky part, the differnce between a monotonous sequence (row_number) 
   -- and another monotonous sequence with gaps (date)
   -- is constant when there's no gap
      date - Row_Number() 
             Over (PARTITION BY Employee, Status
                   ORDER BY date) AS grp
   FROM vt
 ) AS dt
GROUP BY Employee, Status, grp
ORDER BY 3


Both solution will result in an extra row when you add 

20171120   001          At work
...
001           At work       20171115                      20171116
001           At work       20171120                      20171120


If you want to combine with the previous row

001           At work       20171115                      20171120


it's also a bit more complicated...