我有3张桌子:
我想使用以下选项从这3个表中获取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;
这不起作用,因为在这种情况下我不知道如何处理该组。
我也尝试使用临时表,但也没有成功。
感谢您的帮助!
答案 0 :(得分:1)
在您的组中包含daily_value,或使用两个查询。一个将包含日期列和两个聚合,另一个将包含日期列和每日值。然后,您可以使用单个外部查询在日期列上连接这些结果集。
编辑:您在评论中说,通过查询未完成,在组中包含daily_value。这是因为(可能)您的查询包含的所有表之间没有连接条件。这将导致可能非常大的结果集,这将花费很长时间。我不介意帮助实际的SQL,但您需要更新您的问题,以便我们可以看到哪些字段来自哪些表。
答案 1 :(得分:0)
假设你只有一个daily_date条目,'weather_data_daily'中的daily_value你应该 GROUP BY daily_date,daily_value,然后您的聚合(SUM和MAX)将对正确的分组进行操作。
答案 2 :(得分: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。