SQL: что-то не так с наследованием переменных для значений NULL в следующей строке - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь унаследовать значение из предыдущей строки (на основе правильного subscription_id + проверка на IS NULL subscription_status), но что-то идет не так, и я получаю неправильное значение.

Посмотрите на скриншот.

bug_example

Если я не ошибаюсь, он также называется последняя ненулевая головоломка , но примеры возможного решения для других БД предоставляют окнофункция с 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

Я ожидаю получить результаты для этого запроса в этомпуть:

expected_results

ВАЖНО: я собираюсь использовать этот код для большого количества данных (около 1 млн строк), поэтому для меня очень важно избежать дополнительного выбора илиподзапрос, который может замедлить выполнение запроса.

...