Судя по запросу у вас MySQL. Будь у меня Postgres, я бы воспользовался, например, возможностями
CTE. В Мускуле такого нет, кажется, есть какие-то
воркэраунды.
Но можно банально и примитивно. Например, ответ на первый вопрос:
SELECT *
FROM (
SELECT min(temperature) as min, max(temperature) as max, where_id, DATE_FORMAT(date,'%Y-%m-%d') as date from weather GROUP BY where_id, DATE_FORMAT(date,'%Y-%m-%d')
) AS data
ORDER BY max - min DESC
LIMIT 1;
В результате увидим дату, место и минимальную и максимальную температуру в этой точке за данный день.
P.S.
Можно и в один запрос:
SELECT min(temperature) as minn, max(temperature) as maxx, where_id, DATE_FORMAT(date,'%Y-%m-%d') as date from weather GROUP BY where_id, DATE_FORMAT(date,'%Y-%m-%d')
ORDER BY max(temperature) - min(temperature) DESC
LIMIT 1;
P.P.S.
Полный ответ на вопрос 1:
SELECT
where_id,
(
SELECT max(temperature) - min(temperature)
FROM weather
WHERE where_id = w1.where_id
GROUP BY where_id, DATE_FORMAT(date,'%Y-%m-%d')
ORDER BY max(temperature) - min(temperature) DESC
LIMIT 1
) as diff,
DATE_FORMAT(date,'%Y-%m-%d') as date
FROM weather as w1
WHERE id = (
SELECT MAX(id)
FROM weather
WHERE where_id = w1.where_id
GROUP BY where_id, DATE_FORMAT(date,'%Y-%m-%d')
ORDER BY max(temperature) - min(temperature) DESC
LIMIT 1
)