1) Last 180 days of Monday Starts: with weeks as ( select trunc(sysdate - 180, 'DAY') + 1 - 7 + (P.pivot*7) monday_start from dual D, (select rownum pivot from all_objects where rownum < ((((sysdate - (sysdate - 180)) + 1 ) / 7)) + 2) P order by monday_start ) select * from weeks 2) Weeks for specified data range Public Function Select_Weeks( _ ByVal Start_DateString As String, _ ByVal End_DateString As String, _ ByRef sSql As String) As DataSet Dim returnDs As New DataSet Try 'select 'trunc(to_date('02/2/1980',...