CREATE OR REPLACE FUNCTION get_employee_product_changes_last_month() RETURNS TABLE ( id BIGINT, employee_name TEXT, number_of_product_changes BIGINT ) LANGUAGE plpgsql AS $$ BEGIN RETURN QUERY SELECT e.id, p.name AS employee_name, COUNT(DISTINCT mc.date_and_time) AS number_of_product_changes FROM employees e JOIN personal p ON e.id = p.id LEFT JOIN makes_change mc ON e.id = mc.id LEFT JOIN change ch ON mc.date_and_time = ch.date_and_time WHERE mc.date_and_time >= date_trunc('month', CURRENT_DATE) - INTERVAL '1 month' AND mc.date_and_time < date_trunc('month', CURRENT_DATE) GROUP BY e.id, p.name ORDER BY number_of_product_changes DESC; END; $$;