Ошибка в запрос - MySQL

Узнай цену своей работы

Формулировка задачи:

Всем привет! Написал запрос, выполнение которого заканчивается ошибкой:
  CREATE TEMPORARY TABLE distribution AS (
    SELECT 
      IF ( (ABS(i.forecast_budget - r.budget) < 100000000) OR (i.forecast_budget = 0 AND r.budget = 0), 1 , 1 - (i.forecast_budget - r.budget) / (i.forecast_budget + r.budget) ) AS PRECISION
    FROM placement_daily_info i
    JOIN timeslot t ON i.timeslot_id = t.timeslot_id
    LEFT OUTER JOIN v_placement_result r ON i.placement_uid = r.placement_uid AND i.schedule_uid = r.schedule_uid AND t.start_date = r.date
    LEFT OUTER JOIN changed_placements cp ON i.placement_uid = cp.placement_uid
    WHERE i.allocation_type = 3 
    AND i.timeslot_id = @START 
    AND start_timestamp=0
    AND i.placement_uid <> cp.placement_uid
  );
Ошибка:
ERROR 1064 (42000): You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near 'precision
FROM placement_daily_info i
JOIN timeslot t ON i.timeslot_id = t.times' at line 3
Ошибку в упор не вижу.. буду весьма признателен за помощь

Решение задачи: «Ошибка в запрос»

textual
Листинг программы
  CREATE TEMPORARY TABLE distribution AS (
    SELECT 
      i.schedule_uid
      IF(ABS(i.forecast_budget - r.budget) < 100000000 OR (i.forecast_budget=0 AND r.budget=0), 1, 1-ABS(i.forecast_budget - r.budget)/(i.forecast_budget + r.budget)) AS `precision`
    FROM placement_daily_info i
    JOIN timeslot t ON i.timeslot_id = t.timeslot_id
    LEFT OUTER JOIN v_placement_result r ON i.placement_uid = r.placement_uid AND i.schedule_uid = r.schedule_uid AND t.start_date = r.date
    LEFT OUTER JOIN changed_placements cp ON i.placement_uid = cp.placement_uid
    WHERE i.allocation_type = 3 
    AND t.start_date BETWEEN @START AND @END
    AND start_timestamp=0
    AND i.placement_uid <> cp.placement_uid
  );

Объяснение кода листинга программы

Создание временной таблицы distribution с использованием следующего SQL-запроса:

  1. SELECT *
  2. FROM placement_daily_info i
  3. JOIN timeslot t ON i.timeslot_id = t.timeslot_id
  4. LEFT OUTER JOIN v_placement_result r ON i.placement_uid = r.placement_uid AND i.schedule_uid = r.schedule_uid AND t.start_date = r.date
  5. LEFT OUTER JOIN changed_placements cp ON i.placement_uid = cp.placement_uid
  6. WHERE i.allocation_type = 3
  7. AND t.start_date BETWEEN @START AND @END
  8. AND start_timestamp=0
  9. AND i.placement_uid <> cp.placement_uid В данном коде создается временная таблица distribution с полями:
    • schedule_uid
    • precision В поле precision вычисляется точность прогнозирования бюджета. Если разница между прогнозным и реальным бюджетом меньше 10 миллионов, то точность равна 1, иначе используется формула для расчета точности прогнозирования. Ключевые условия для включения в таблицу:
    • allocation_type = 3 (показывается только для определенных типов распределения)
    • t.start_date BETWEEN @START AND @END (даты выбираются из заданного диапазона)
    • start_timestamp=0 (момент начала временного интервала равен 0)
    • i.placement_uid <> cp.placement_uid (исключаются объекты, которые были изменены в других записях)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5