Я пытаюсь унаследовать значение из предыдущей строки (на основе правильного subscription_id + проверка на IS NULL subscription_status), но что-то идет не так, и я получаю неправильное значение.
Посмотрите на скриншот.
Если я не ошибаюсь, он также называется последняя ненулевая головоломка , но примеры возможного решения для других БД предоставляют окнофункция с IGNORE NULLS. Но я использую MySQL 8.x, и он не поддерживает эту функцию.
Извините, но скрипта SQL не предоставляет правильное текстовое значение для переменных в моем коде :( https://www.db -fiddle.com / f / wHanqoSCHKJHus5u6BU4DB / 4
Или вы можете увидеть здесь ошибки:
SET @history_subscription_status = NULL;
SET @history_subscription_id = 0;
SELECT
c.date,
c.user_id,
c.subscription_id,
sd.subscription_status,
(@history_subscription_id := c.subscription_id) as 'historical_sub_id',
(@history_subscription_status := CASE
WHEN @history_subscription_id = c.subscription_id AND sd.subscription_status IS NULL
THEN @history_subscription_status
ELSE
sd.subscription_status
END
) as 'historical'
FROM
calendar c
LEFT JOIN
subscription_data sd ON sd.date = c.date AND sd.user_id = c.user_id AND sd.subscription_id = c.subscription_id
ORDER BY
c.user_id,
c.subscription_id,
c.date
Я ожидаю получить результаты для этого запроса в этомпуть:
ВАЖНО: я собираюсь использовать этот код для большого количества данных (около 1 млн строк), поэтому для меня очень важно избежать дополнительного выбора илиподзапрос, который может замедлить выполнение запроса.