Pull to refresh

Comments 2

Эх, любите Вы массивы.. Первая часть классическим способом у меня отработала за

Execution Time: 5.862 ms

Ваш вариант отработал за 160.879 ms

Спасибо за интересные варианты решений.

diff AS 
(
SELECT 
	*,
	y - LEAD(y) over(PARTITION BY rn) AS d
FROM 
	t 
),
check_condition AS 
(
SELECT 
	rn
FROM 
	diff
WHERE 
	d IS NOT NULL
GROUP BY 
	rn
HAVING 
	count(*) = ANY(array[(count(*) filter(WHERE d > 0)) , (count(*) filter(WHERE d < 0))])
	AND 
	count(*) = abs(sum(sign(d)) FILTER(WHERE d BETWEEN 1 AND 3 OR d BETWEEN -3 AND -1))
)
SELECT 
	count(*)
FROM 
	check_condition

Я исключительно "за" множество разнообразных подходов к решениям! Правда, такого уровня запросы уже стоит как-то "расшифровывать" - с массивами это как-то попроще.

Sign up to leave a comment.