我需要在两个表中获取最大值并显示四列不同的值。 摄氏度哼声fecha_temp | fecha_hum
Table: temperaturas
Columns:
id_temp int(11) AI PK
celsius_temp decimal(10,0)
fah_temp decimal(10,0)
fecha_temp datetime
Table: humedad
Columns:
id_hum int(11) AI PK
hum_hum float
fecha_hum datetime
我尝试了这个查询,但没有工作
select t.celsius_temp as celsius, h.hum_hum, t.fecha_temp, h.fecha_hum from
temperaturas t
inner join humedad h on h.hum_hum <=(select max(h.hum_hum) from humedad h)
where t.celsius_temp<=(select max(t.celsius_temp) from temperaturas t) and
t.fecha_temp between '2017-12-01' and '2017-12-05'
order by t.celsius_temp, h.hum_hum desc limit 1;
非常感谢
答案 0 :(得分:1)
期间内每张表的最大值为:
SET @start_date = '2017-12-01';
SET @end_date = '2017-12-01';
SELECT MAX(t.celsius_temp) INTO @tmax FROM temperaturas t
WHERE t.fecha_temp BETWEEN @start_date AND @end_date;
SELECT MAX(h.hum_hum) INTO @hmax FROM humedad h
WHERE t.fecha_hum between @start_date AND @end_date;
你可以将它们放在一个表中:
SELECT @tmax, @hmax;
如果您想知道达到最高温度或最高湿度的日期,由于您可能有多个具有相同值的日期,因此有点棘手。您可以将其写为单个查询,但我宁愿使用上述查询然后运行:
SELECT * from temperaturas t where t.celsius_temp = @maxt;
SELECT * from humedad h where h.hum_hum = @maxh;
请记住,如果多个日期的温度相同,则可能有多行。没有简单明智的方法将如何将其加入到一个表中。
如果您每天进行多次测量并且每天都在寻找最高温度/湿度,那么您需要使用分组依据功能。然后,您可以加入时间戳的date()函数,如下所示:
SELECT coalesce(date(t.fecha_temp), date(h.fecha_hum)),
MAX(t.celsius_temp) as celsius,
MAX(h.hum_hum) as humibity
FROM temperaturas t
OUTER JOIN humedad h on date(t.fecha_temp) = date(h.fecha_hum)
WHERE coalesce(date(t.fecha_temp), date(h.fecha_hum))
between @start_date and @end_date
GROUP BY coalesce(date(t.fecha_temp), date(h.fecha_hum))
ORDER BY coalesce(date(t.fecha_temp), date(h.fecha_hum))
这里的coalesce()
功能是必要的,因为您可能只有一个表可能有数据的日期。
如果您有大量数据,则此连接效率不高,在这种情况下,您可能希望查看使用组函数结果创建临时表,然后在每个日期加入单行。