2016-01-01 is the week 1 of 2016, but also is the week 53 of 2015.
When I run SELECT DATE_PART(w, \'2016-01-01\') it returns 53, but when I run
SELECT DATE_PART(w, \'2016-01-01\')
53
Create a custom function with this case statement or use it in your SQL statements:
case when DATE_PART('W', dt)>=51 and EXTRACT(DOY FROM dt) < 8 then 1 else DATE_PART('W', dt)+1 end week_no
It will start counting weeks on Jan 1st.
http://sqlfiddle.com/#!15/ccb90/9