всех одинаковых name вытащить локальный максимум левее глобального минимума, если функция в целом возрастающая (глобальный минимум находится левее глобального максимума).
Что я делал:
1) Для начала - примерный запрос, который разберем по частям
SELECT
name,
prevMax
FROM
(
SELECT
name,
argMax(date, value) as prevMax
FROM db.mytable
WHERE date<x
GROUP BY name
)
INNER JOIN
(
SELECT
name,
argMin(date, value) AS x,
argMax(date, value) AS y
FROM db.mytable
GROUP BY name
HAVING x<y
) USING name
2) Для начала надо составить временную таблицу глобальных экстремумов, где минимум левее максимума. Это делается запросом
SELECT
name,
argMin(date, value) AS x,
argMax(date, value) AS y
FROM db.mytable
WHERE value!=0
GROUP BY name
HAVING x<y
3) Дальше по идее мне надо снова пройтись по таблице, но применяя условие, полученное из второй таблицы. Поэтому использую INNER JOIN
4) Выставляю условие, что ищем левее минимума WHERE date<x и выводим дату максимума
SELECT
name,
argMax(date, value) as prevMax
Проблема в том, что date<x делать нельзя, так как левый запрос ничего не знает о правом.
Any suggestions?
Решили задачу?
Обсуждают сегодня