https://www.youtube.com/watch?v=8nfzv1XI1Ic&list=PLBTZqjSKn0IfuIqbMIqzS-waofsPHMS0E&index=16

-- Create the company_revenue table
CREATE TABLE company_revenue (
    company VARCHAR(100),
    year INT,
    revenue INT
);

-- Insert values into the company_revenue table
INSERT INTO company_revenue (company, year, revenue) VALUES 
    ('ABC1', 2000, 100),
    ('ABC1', 2001, 110),
    ('ABC1', 2002, 120),
    ('ABC2', 2000, 100),
    ('ABC2', 2001, 90),
    ('ABC2', 2002, 120),
    ('ABC3', 2000, 500),
    ('ABC3', 2001, 400),
    ('ABC3', 2002, 600),
    ('ABC3', 2003, 800);

Pasted image 20241114183336.png

WITH
LAG()

WITH CTE AS (
SELECT *,
revenue - lag(revenue,1,0) OVER (PARTITION BY company) AS rev_diff
,count(1) OVER (PARTITION BY company) AS cnt
FROM company_revenue
)

SELECT company FROM CTE
WHERE rev_diff > 0
GROUP BY company,cnt
HAVING cnt = count(1);

Pasted image 20241114183554.png

-- Approach 2 (Shorter)
WITH CTE AS (
SELECT *,
revenue - lag(revenue,1,0) OVER (PARTITION BY company) AS rev_diff
,count(1) OVER (PARTITION BY company) AS cnt
FROM company_revenue
)

SELECT company FROM CTE
WHERE company NOT IN (SELECT company FROM cte WHERE rev_diff<0)
GROUP BY company;