Autor Tema: Consulta SQL  (Leído 1413 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jmsolher

  • Full Member
  • ***
  • Mensajes: 105
    • Ver Perfil
    • meteoBezana
  • Estación: ESCTB3900000039108A
Consulta SQL
« 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
Código: [Seleccionar]
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.
« Última modificación: 07 de Enero del 2022, 12:46:06 pm por JosMar »

Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 4.403
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Consulta SQL
« Respuesta #1 en: 07 de Enero del 2022, 16:37:47 pm »
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:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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
« Última modificación: 08 de Enero del 2022, 20:37:19 pm por jmviper »


Archena, Valle de Ricote (Murcia). 120 msnm. 19.622 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Desconectado jmsolher

  • Full Member
  • ***
  • Mensajes: 105
    • Ver Perfil
    • meteoBezana
  • Estación: ESCTB3900000039108A
Re:Consulta SQL
« Respuesta #2 en: 08 de Enero del 2022, 17:37:08 pm »

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:

Código: [Seleccionar]
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?
« Última modificación: 08 de Enero del 2022, 17:40:36 pm por JosMar »

Conectado B.Santiago

  • Moderador Global
  • Hero Member
  • ******
  • Mensajes: 1.978
    • Ver Perfil
  • Estación: Ávila- La Colilla [ESCYL0500000005192A]
Re:Consulta SQL
« Respuesta #3 en: 08 de Enero del 2022, 17:50:16 pm »
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.
« Última modificación: 08 de Enero del 2022, 17:55:50 pm por B.Santiago »
[img width=180

Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 4.403
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Consulta SQL
« Respuesta #4 en: 08 de Enero del 2022, 20:35:13 pm »
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:

Código: [Seleccionar]
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.


Archena, Valle de Ricote (Murcia). 120 msnm. 19.622 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Desconectado jmsolher

  • Full Member
  • ***
  • Mensajes: 105
    • Ver Perfil
    • meteoBezana
  • Estación: ESCTB3900000039108A
Re:Consulta SQL
« Respuesta #5 en: 08 de Enero del 2022, 20:36:29 pm »
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  :)
Código: [Seleccionar]
SELECT round(windDir,1), count(*) as 'total' from archive where strftime('%Y',datetime("dateTime", 'unixepoch', 'localtime')) = '2021' group by windDir;


Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 4.403
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Consulta SQL
« Respuesta #6 en: 09 de Enero del 2022, 00:02:20 am »
Eso te contará las 360 direcciones posibles... no te viene ya toda esta info en los NOAA ??


Archena, Valle de Ricote (Murcia). 120 msnm. 19.622 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es