Средняя температура за последние 3 календарных дня
Есть таблица дневной средней температуры:
CREATE TABLE temperatures (
dt TEXT PRIMARY KEY,
avg_temperature REAL NOT NULL
);
Для каждой даты верните среднюю температуру за последние 3 календарных дня: текущая дата, вчера и позавчера.
Если каких-то дат в таблице нет, они просто не участвуют в среднем.
Верните dt, avg_temperature_3d. Отсортируйте результат по dt ASC.
Решение прямо на странице
Напишите код, запустите проверки и только потом открывайте разбор.
Нажмите «Запустить проверки» или Ctrl+Enter.
Показать разбор
Подсказки
- Календарное окно
В SQLite можно использовать date(cur.dt, '-2 day').
- Пропуски дат
Не надо генерировать отсутствующие даты: усредняйте только строки, которые есть в таблице.
Идея решения
Так как окно задано календарными днями, а не количеством строк, проще использовать self join. Для каждой строки cur берем строки hist, где hist.dt попадает между date(cur.dt, '-2 day') и cur.dt.
После этого группируем по текущей дате и считаем AVG(hist.avg_temperature).
Эталонный код
SELECT
cur.dt,
AVG(hist.avg_temperature) AS avg_temperature_3d
FROM temperatures cur
JOIN temperatures hist
ON hist.dt BETWEEN date(cur.dt, '-2 day') AND cur.dt
GROUP BY cur.dt
ORDER BY cur.dt ASC;