ВЫБЕРИТЕ с MAX и SUM из нескольких таблиц - PullRequest
0 голосов
/ 26 ноября 2010

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

  • данные о погоде (почасовая дата, дождь)
  • data_data_calculated (hourly_date, calc_value)
  • weather_data_daily (daily_date, daily_value)

Я хотел бы получить список ЕЖЕДНЕВНОГО значения из этих 3 таблиц, используя этот выбор:

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

СУММА и МАКС должны быть выполнены на все часы дня.

Вот что я сделал:

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;

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

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

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

Ответы [ 3 ]

1 голос
/ 26 ноября 2010

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

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

0 голосов
/ 26 ноября 2010

попробуйте это:

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

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

0 голосов
/ 26 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...