Задать вопрос
  • Странное поведение COALESCE в SQL запросе?

    opium
    @opium
    Просто люблю качественно работать
    тут MySQL кривит на связке CTE + оконная функция + COALESCE — оптимизатор скорее всего объединяет CTE в основной запрос так, что rp.start_report_date оказывается NULL внутри COALESCE.

    Чище всего — используй третий аргумент LAG вместо обёртки в COALESCE:
    lag(t.rasp_time, 1, rp.start_report_date) over(partition by t.vg_id order by t.rasp_time) as prev_rasp_time


    Если не поможет — разнеси по уровням: вычисли LAG в raw_data как отдельный столбец lag_rasp_time, COALESCE уже в следующем SELECT:
    coalesce(lag_rasp_time, start_report_date) as prev_rasp_time


    Можно ещё попробовать хинт NO_MERGE для report_period — Akina в комментарии намекнул правильно.
    Ответ написан
    1 комментарий