SQLize Online / PHPize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
ROLLBACK; BEGIN; CREATE TEMP TABLE stocks ( id SERIAL not null PRIMARY KEY, date DATE NOT NULL, title VARCHAR NOT NULL, stock CHAR(1) ) ON COMMIT DROP; INSERT INTO stocks(date, title, stock) VALUES ('2022-01-01', 'title 1', 'N'), ('2022-01-02', 'title 1', 'N'), ('2022-01-03', 'title 1', 'N'), ('2022-01-04', 'title 1', 'Y'), ('2022-01-05', 'title 1', 'Y'), ('2022-01-06', 'title 1', 'N'), ('2022-01-08', 'title 1', 'N'), ('2022-01-09', 'title 1', 'N'), ('2022-01-15', 'title 1', 'N'), ('2022-01-02', 'title 2', 'N'), ('2022-01-03', 'title 2', 'Y'), ('2022-01-04', 'title 2', 'Y'), ('2022-01-08', 'title 2', 'N'), ('2022-01-09', 'title 2', 'N'); SELECT * FROM stocks; WITH cte AS ( SELECT id, date, title, stock, (CASE WHEN stock = 'N' AND LAG(stock) over w = 'N' THEN date - LAG(date) over w WHEN stock = 'N' AND LAG(stock) over w = 'Y' OR LAG(stock) over w IS NULL THEN 0 WHEN stock = 'Y' THEN NULL END) AS delta, SUM(CASE WHEN stock = 'Y' THEN 1 ELSE 0 END) OVER w AS part_key FROM stocks WINDOW w AS (PARTITION BY title ORDER BY date ASC) ORDER BY id) SELECT id, date, title, stock, delta, part_key, SUM(delta) OVER w2 AS doos FROM cte WINDOW w2 AS (PARTITION BY title, part_key ORDER BY date ASC ) ORDER BY id; ROLLBACK ;
Stuck with a problem? Got Error? Ask ChatGPT!
Copy Clear