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.
SQL HowTo: логические агрегаты (Advent of Code 2024, Day 2: Red-Nosed Reports)