Changes between Version 2 and Version 3 of AdvancedReports


Ignore:
Timestamp:
01/23/26 19:24:49 (7 days ago)
Author:
231136
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReports

    v2 v3  
    144144);
    145145}}}
     146
     147
     148== 4. Детален извештај за најпопуларниот артист според месечни слушања за изминатата година
     149{{{
     150SET search_path TO 'project';
     151
     152with one_year AS (
     153    SELECT
     154        DATE_TRUNC('year', CURRENT_DATE) - INTERVAL '1 year' AS year_start,
     155        (DATE_TRUNC('year', CURRENT_DATE) - INTERVAL '1 year') + INTERVAL '1 year - 1 day' AS year_end
     156),
     157monthly_artist_listens AS (
     158    SELECT
     159        EXTRACT(MONTH FROM l.timestamp) AS month,
     160        a.user_id,COUNT(l.timestamp)AS count
     161    FROM listens l
     162    JOIN one_year oy ON l.timestamp>=oy.year_start AND l.timestamp<=oy.year_end
     163    JOIN musical_entities me ON l.song_id=me.id
     164    JOIN artists a ON a.user_id=me.released_by
     165    GROUP BY EXTRACT(MONTH FROM l.timestamp),a.user_id
     166),
     167max_per_month AS(
     168    SELECT
     169        mal.month AS month,
     170        MAX(count) AS max_month_counter
     171    FROM monthly_artist_listens mal
     172    GROUP BY mal.month
     173    ORDER BY mal.month
     174),
     175most_popular AS (
     176    SELECT
     177        mal.month,
     178        user_id,
     179        max_month_counter
     180    FROM monthly_artist_listens mal
     181    JOIN max_per_month mpm ON mpm.month=mal.month AND mpm.max_month_counter=mal.count
     182    WHERE NOT EXISTS (
     183        SELECT 1
     184        FROM monthly_artist_listens mal1
     185        JOIN max_per_month mpm1 ON mpm1.month=mal1.month AND mpm1.max_month_counter=mal1.count
     186        WHERE mal.user_id > mal1.user_id AND mal1.month=mal.month
     187        )
     188    ORDER BY mal.month
     189),
     190months AS (
     191    SELECT
     192        n AS month_num,
     193        TO_CHAR(MAKE_DATE(2025, n, 1), 'Month') AS month_name
     194    FROM GENERATE_SERIES(1, 12) AS g(n)
     195)
     196SELECT
     197    CONCAT(EXTRACT(YEAR FROM oy.year_start),'-',m.month_name) AS month,
     198    COALESCE(u.full_name,'n/a') AS artist_name,
     199    COALESCE(mp.max_month_counter,0) AS aonthly_listens
     200FROM months m
     201LEFT JOIN most_popular mp ON mp.month=m.month_num
     202LEFT JOIN users u ON mp.user_id=u.user_id
     203CROSS JOIN one_year oy
     204ORDER BY m.month_num
     205}}}