Meteoclimatic
Software => WeeWX => Mensaje iniciado por: jmsolher en 07 de Enero del 2022, 11:12:06 am
-
Hola
estoy interesado en saber cómo realizar una consulta SQL a la base de datos preguntando por la media de las temperaturas mínimas de todo el año. Sé cómo se hace la media de las temperaturas de todo un año (supongamos el 2021) que sería algo así como SELECT avg(outTemp) as 'TempMedia'from archive where dateTime>='1609455600' and dateTime<=1640991599';
lo cual arroja la temperatura media de todo un año pero quiero saber la media de las mínimas.
Por otra parte, me gustaría que el resultado lo agrupara mes a mes, es decir, la media de las mínimas de enero, la media de las mínimas de febrero....etc ¿es posible?
saludos.
-
Hola Josmar
Las máximas y mínimas están en la tabla archive_day_outTemp (columnas max y min).
Así si por ejemplo quieres hacer la media de lo que va de año ejecutas:
sqlite> SELECT avg(min) as 'TempMediaMin' from archive_day_outTemp where strftime('%Y',datetime("dateTime", 'unixepoch', 'localtime')) = '2022';
Si quieres las de un mes en concreto:
sqlite> SELECT avg(min) as 'TempMediaMin' from archive_day_outTemp where strftime('%Y',datetime("dateTime", 'unixepoch', 'localtime')) = '2022' and strftime('%m',datetime("dateTime", 'unixepoch', 'localtime')) = '01';
Eso es para el mes de este año, si no le pones la parte del año te calculará todas las medias mínimas de todos los eneros que hayan en la BBDD. Como ves el truco es pedirle %Y ó %m para el año o el mes o los dos a la vez.
Para las máximas igual pero poniendo avg(max) as 'TempMediaMax'
Lo que tú has hecho es una media integrada (sumar todos los registros y dividirlos entre el número total de estos). El método tradicional cuando estaban solamente los termómetros de máxima y mínima era el de sumar máxima y mínima y dividirlo entre dos (media aritmética). Hay gente que con largas series la sigue queriendo hacer. Para ello puedes calcularla de la siguiente manera:
SELECT avg((max-min)/2+min) as 'TempMedia' from archive_day_outTemp where strftime('%Y',datetime("dateTime", 'unixepoch', 'localtime')) = '2022' and strftime('%m',datetime("dateTime", 'unixepoch', 'localtime')) = '01';
Así te calcula la media aritmética de máximas y mínimas de este mes de enero.
Decir, por último, que las fechas según he puesto las cogerá en local ya que lleva 'localtime' en los parámetros. Si tienes la raspi en UTC tomará así el tiempo en UTC pero si tienes la hora del sistema en hora local y quieres UTC le quitas lo del ', localtime' y lo calculará en UTC.
Saludos
-
Lo que tú has hecho es una media integrada (sumar todos los registros y dividirlos entre el número total de estos). El método tradicional cuando estaban solamente los termómetros de máxima y mínima era el de sumar máxima y mínima y dividirlo entre dos (media aritmética). Hay gente que con largas series la sigue queriendo hacer. Para ello puedes calcularla de la siguiente manera:
SELECT avg((max-min)/2) as 'TempMedia' from archive_day_outTemp where strftime('%Y',datetime("dateTime", 'unixepoch', 'localtime')) = '2022' and strftime('%m',datetime("dateTime", 'unixepoch', 'localtime')) = '01';
Así te calcula la media aritmética de máximas y mínimas de este mes de enero.
hola jmviper,
gracias por tu ayuda
para realizar un climograma ¿cuál dirías que es el cálculo de la media de temperaturas más apropiado?
solo una cosa más ¿cómo puedo calcular la dirección del viento dominante en 2021?
-
Para el climograma, has de representar en él las temperaturas medias de cada mes. No hay dudas sobre esto. Normalmente se recurre a la media aritmética.
Luego, al margen, puedes explicitar la temperatura media anual.
-
Como te dice B.Santiago el climograma se hace con las medias mensuales.
He tenido una equivocación de las buenas con el comando para la media de máximas/mínimas.... :;
Lo corrijo arriba. El comando bueno es este:
SELECT avg((max-min)/2+min) as 'TempMedia' from archive_day_outTemp where strftime('%Y',datetime("dateTime", 'unixepoch', 'localtime')) = '2022' and strftime('%m',datetime("dateTime", 'unixepoch', 'localtime')) = '01';
Se me olvidó sumar la mitad a la mínima para que dé la media aritmética.
Así si en mi BBDD hago la media integrada:
SELECT avg(outTemp) from archive where strftime('%Y',datetime("dateTime", 'unixepoch', 'localtime')) = '2021';
19.220111058053
que es la media del año pasado que me hace también WD.
Con la de máximas/mínimas:
SELECT avg((max-min)/2+min) from archive_day_outTemp where strftime('%Y',datetime("dateTime", 'unixepoch', 'localtime')) = '2021';
19.7070788088761
Ligeramente superior, como casi siempre ocurre.
-
solo una cosa más ¿cómo puedo calcular la dirección del viento dominante en 2021?
Me autorrespondo
Creo que esta solución puede servir, sino es así, por favor que me corrijan los que más saben de SQL :)
SELECT round(windDir,1), count(*) as 'total' from archive where strftime('%Y',datetime("dateTime", 'unixepoch', 'localtime')) = '2021' group by windDir;
-
Eso te contará las 360 direcciones posibles... no te viene ya toda esta info en los NOAA ??