月の第何週ごとの集計を出すときは
SELECT TO_CHAR(hdate,'YYYY-MM/w'), COUNT(*) as count FROM hoge GROUP BY TO_CHAR(hdate,'YYYY-MM/w') ORDER BY TO_CHAR(hdate,'YYYY-MM/w')
月またぎを無視して、とにかく週ごとの集計を出すときは
SELECT TO_CHAR( TRUNC(hdate,'DAY'),'YYYY-MM-DD'), COUNT(*) as count FROM hoge GROUP BY TRUNC(hdate,'DAY') ORDER BY TRUNC(hdate,'DAY')
TO_CHAR()
数値型や日付型などを文字列に変換する関数
TO_CHAR(hdate,'YYYY-MM/w') は、年/月-週 に変換する
('w'は日曜始まりではなく、その月の一日からの経過日数で出される)
TRUNC()
数値型や日付型などを切り詰める関数
TRUNC(hdate,'DAY') は、直前の日曜日の日付に変換する
MySQLのweek()と互換性のある方法はわからない
SELECT sysdate, (TO_CHAR( sysdate+1,'iw' ) - TO_CHAR( TRUNC(sysdate,'MM')+1,'iw' ) + 1) FROM dual
基本的に、日付の週番号から、その月の1日の週番号を引いて求める。
IWはISO週(年の始まりからの週数)で、週の数え方は月曜始まりになっている。
なので、ISO週を求める前に日付に1を足してごまかす。
1/1は、木曜日よりうしろだと前年度の週番号になってしまう(1/1の週番号が53とかになる)。
ここを解決すればなんとかそれっぽく出来るはず