30 lines
974 B
MySQL
30 lines
974 B
MySQL
|
|
-- Migration: Fix weekly_report_mv to use ISOYEAR instead of YEAR
|
||
|
|
-- This fixes incorrect week calculations at year boundaries
|
||
|
|
-- Date: 2024
|
||
|
|
|
||
|
|
-- Drop existing materialized view
|
||
|
|
DROP MATERIALIZED VIEW IF EXISTS weekly_report_mv;
|
||
|
|
|
||
|
|
-- Recreate materialized view with ISOYEAR
|
||
|
|
CREATE MATERIALIZED VIEW weekly_report_mv AS
|
||
|
|
SELECT
|
||
|
|
n.project_id,
|
||
|
|
-- 🔑 ГЛАВНОЕ ИСПРАВЛЕНИЕ: Используем ISOYEAR
|
||
|
|
EXTRACT(ISOYEAR FROM e.created_date)::INTEGER AS report_year,
|
||
|
|
EXTRACT(WEEK FROM e.created_date)::INTEGER AS report_week,
|
||
|
|
SUM(n.score) AS total_score
|
||
|
|
FROM
|
||
|
|
nodes n
|
||
|
|
JOIN
|
||
|
|
entries e ON n.entry_id = e.id
|
||
|
|
GROUP BY
|
||
|
|
1, 2, 3
|
||
|
|
WITH DATA;
|
||
|
|
|
||
|
|
-- Recreate index
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_weekly_report_mv_project_year_week
|
||
|
|
ON weekly_report_mv(project_id, report_year, report_week);
|
||
|
|
|
||
|
|
COMMENT ON MATERIALIZED VIEW weekly_report_mv IS 'Materialized view aggregating weekly scores by project using ISOYEAR for correct week calculations';
|
||
|
|
|