Вставка одной строки MySQL со значениями из нескольких вложенных операторов SELECT

0

Я пытаюсь объединить следующие два оператора в один оператор SELECT, чтобы я мог вставлять возвращаемые значения в одну и ту же строку с одним выражением.

SELECT ROUND(AVG(pressure),1) FROM rawinput WHERE timestamp >= SUBDATE(timestamp(now()), INTERVAL 1 HOUR);

SELECT ROUND((SELECT AVG(hourly_average_pressure) FROM hour_numbers WHERE timestamp >= CURTIME() - INTERVAL 1 HOUR)-(SELECT AVG(hourly_average_pressure) FROM hour_numbers WHERE timestamp >= CURTIME() - INTERVAL 2 HOUR AND timestamp < CURTIME() - INTERVAL 1 HOUR),1);

Я уже пробовал форматировать, как показано ниже (в основном добавляя скобки вокруг обоих операторов SELECT и заменяя запятую запятой), но я получил синтаксическую ошибку. Это единственный способ сделать это с помощью UNION ALL или я что-то упустил в формате? Спасибо за помощь.

(SELECT ROUND(AVG(pressure),1) FROM rawinput WHERE timestamp >=SUBDATE(timestamp(now()), INTERVAL 1 HOUR)), (SELECT ROUND((SELECT AVG(hourly_average_pressure) FROM hour_numbers WHERE timestamp >= CURTIME() - INTERVAL 1 HOUR)-(SELECT AVG(hourly_average_pressure) FROM hour_numbers WHERE timestamp >= CURTIME() - INTERVAL 2 HOUR AND timestamp < CURTIME() - INTERVAL 1 HOUR),1));
  • 0
    Не могли бы вы уточнить, каков ваш ожидаемый результат и как эти два оператора связаны (они имеют одинаковые временные метки, идентификаторы независимо от того)?
  • 0
    Конечно, я пытался вставить возвращенные значения из обоих этих операторов выбора в одну строку (один оператор вставки). Ни одно из полей не может быть пустым, поэтому при вставке данных с отметкой времени о вычисленных значениях температуры и давления это должно быть сделано в одном выражении, поэтому они будут помечены с одинаковой отметкой времени ... (База данных используется для сбора данных со станции мониторинга погоды Raspberry Pi)
Теги:

1 ответ

0
Лучший ответ

Если вы правильно отформатируете свой код, легко увидеть, что вам не хватает SELECT перед вашим кодом.

(
    SELECT ROUND(AVG(pressure),1) 
    FROM rawinput 
    WHERE timestamp >=SUBDATE(timestamp(now()), INTERVAL 1 HOUR)
)
, (
    SELECT ROUND((SELECT AVG(hourly_average_pressure) FROM hour_numbers WHERE timestamp >= CURTIME() - INTERVAL 1 HOUR)-(SELECT AVG(hourly_average_pressure) 
    FROM hour_numbers 
    WHERE timestamp >= CURTIME() - INTERVAL 2 HOUR AND timestamp < CURTIME() - INTERVAL 1 HOUR),1)
);

С помощью SELECT

SELECT (
    SELECT ROUND(AVG(pressure),1) 
    FROM rawinput 
    WHERE timestamp >=SUBDATE(timestamp(now()), INTERVAL 1 HOUR)
)
, (
    SELECT ROUND((
        SELECT AVG(hourly_average_pressure) 
        FROM hour_numbers 
        WHERE timestamp >= CURTIME() - INTERVAL 1 HOUR
    ) - (
        SELECT AVG(hourly_average_pressure) 
        FROM hour_numbers 
        WHERE timestamp >= CURTIME() - INTERVAL 2 HOUR AND timestamp < CURTIME() - INTERVAL 1 HOUR
    ), 1)
);
  • 0
    Спасибо, Эрик, это сработало отлично. Правильное форматирование, как вы продемонстрировали, несомненно, предотвратит еще много моих проблем с различными хранимыми процедурами, которые я создаю, спасибо :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню