ВЫБЕРИТЕ с MAX и SUM из нескольких таблиц

0

У меня есть 3 таблицы:

  • weather_data (hourly_date, rain)
  • weather_data_calculated (hourly_date, calc_value)
  • weather_data_daily (daily_date, daily_value)

Я хотел бы получить список значений DAILY из этих трех таблиц, используя этот выбор:

SELECT daily_date, daily_value, SUM(rain), MAX(calc_value)

SUM и MAX необходимо выполнить в течение всего часа дня.

Это то, что я сделал:

SELECT
date_format(convert_tz(daily_date, 'GMT', 'America/Los_Angeles'), '%Y-%m-%d 00:00:00') as daily_date_gmt,
daily_value,
SUM(rain),
MAX(calc_value)
FROM weather_data_daily wdd, weather_data wd, weather_data_calculated wdc
WHERE daily_date_gmt=date_format(convert_tz(wd.hourly_date, 'GMT', 'America/Los_Angeles'), '%Y-%m-%d 00:00:00')
and daily_date_gmt=date_format(convert_tz(wdc.hourly_date, 'GMT', 'America/Los_Angeles'), '%Y-%m-%d 00:00:00')
group by daily_date_gmt
order by daily_date_gmt;

Это не сработало, потому что я не знаю, как в этом случае иметь дело с группой.

Я также пытаюсь использовать временную таблицу, но без успеха.

Спасибо за вашу помощь!

Теги:
group-by

3 ответа

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

Либо включать daily_value в вашу группу, либо использовать два запроса. Один будет содержать столбец даты и два агрегата, другой будет содержать столбец даты и ежедневное значение. вы можете использовать один внешний запрос для объединения этих наборов результатов в столбце даты.

EDIT: в своем комментарии вы говорите, что включая daily_value в группе, если запрос не завершен. Это связано с тем, что (возможно) у вас нет критериев соединения между всеми таблицами, к которым относится ваш запрос. Это приведет к потенциально ОЧЕНЬ большому набору результатов, который займет очень много времени. Я не против помогать с фактическим SQL, но вам нужно будет обновить свой вопрос, чтобы мы могли видеть, какие поля поступают из этих таблиц.

  • 0
    Когда я пытаюсь выполнить запрос с включенным daily_value, он никогда не завершается ... (кстати, ссылка без него включена)
  • 0
    ответ обновлен.
0

попробуйте следующее:

select a.daily_date, a.daily_value, SUM(b.rain), MAX(c.calc_value)
from weather_data_daily a,weather_data b,weather_data_calculated c
where convert(varchar, a.daily_date, 101)=convert(varchar, b.hourly_date, 101)
and convert(varchar, a.daily_date, 101)=convert(varchar, c.hourly_date, 101)
group by a.daily_date, a.daily_value

Вам нужно как-то соединить таблицы (это использует внутреннее соединение). Это требует получения почасовых дат и других дат в том же формате. Это дает им формат MM/DD/YYYY.

0

Предполагая, что у вас есть только одна запись для day_date, daily_value в 'weather_data_daily', вы должны GROUP BY daily_date, daily_value, то ваши агрегации (SUM и MAX) будут работать с правильной группировкой.

Ещё вопросы

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