Consultas personalizadas de WSPRnet
Para consultar la base de datos (B.D) de WSPRnet se necesita tener unas nociones básicas del lenguaje SQL, que es un estándar de manejo de BB.DD relacionales, y conocer la estructura de la misma.
Una B.D. se compone básicamente de tablas que tienen columnas o campos y filas o registros
Una web que facilita las consultas mediante QSL a WSPRnet es https://wspr.rocks/
La base de datos WSPRnetse llama "wspr.live", y la tabla donde se encuentran los spots recibidos "wspr.rx" , por lo que las consultas que se hacen con el comando "SELECT" deberán incluir la clausula "FROM wspr.rx"
ESTRUCTURA DE LA TABLA WSPR.RX
Los nombres de las columnas de la tabla wspr-rx son los siguientes ( muchos son evidentes):
- id: identificador único del registro.
- time: fecha y hora de la recepción ("spot") en formato YYY-MM-DD HH:MM:SS.
- band: banda de frecuencias usada ( -1:LF, 0:MF, 1:160m, 3:80m, 5:60m, 7:40m, 10:30m, 14:20m, 18:17m, 21:15m, 24:12m, 28:10m, 50:6m, 70:4m, 144:2m, 432:70cm, 1296:23cm).
- rx_sign: indicativo de la estación RX que ha recibido el menaje WSPR.
- rx_lat: latitud geográfica de la estación RX en formato decimal (GG.DDD según sea N o S - ).
- rx_lon: longitud geográfica de la estación RX en formato decimal (GG.DDD con signo según sea E o W -).
- rx_loc: grid o locator geográfica de la estación RX con 6 posiciones XXNNxx.
- tx_sign: indicativo de la estación TX que ha emitido el menaje WSPR.
- tx_lat: latitud geográfica de la estación TX en formato decimal (GG.DDD según sea N o S - ).
- tx_lon: longitud geográfica de la estación TX en formato decimal (GG.DDD con signo según sea E o W -).
- tx_loc: grid o locator geográfica de la estación TX con 6 posiciones XXNNxx.
- distance: distancia entre el TX y el RX en km.
- azimuth: azimuth del RX visto por el TX expresado en grados
- rx_azimuth: azimuth del RX visto por el TX expresado en grados
- frequency: frecuencias concreta usada expresada en Hz.
- power: potencia del TX expresada dBm (-23dBm=0,2 W)
- snr: relación señal (s) / ruido(N) expresada en dB, como tienen valor negativo, cuanto menor sea mejor es la relación.
- drift: deriva
- version: del receptor
- code: tipo de protocolo usado code 1 = mode 2 (WSPR2,FST4W-120), code 2 = mode 15 (FST4W-900), code 4 = mode 5 (FST4W-300), code 8 = mode 30 (FST4W-1800)
CONSULTAS - QUERYS
Para conocer el número de spots recibidos por la red en un día (p.e. 13/6/2025) se hace "SELECT COUNT(*)" desde las 00h00 del 13/6/2025 a las 00h00 del 14/6/2025 "AND time > '2025-06-13' AND time < '2025-06-14'" de la siguiente forma:
- SELECT COUNT(*) FROM wspr.rx WHERE time > '2025-06-13' AND time < '2025-06-14';
El número de spots recibidos en un día como el 13/6/2025 fue de 3.562.511
Si son los spots recibidos desde una fecha hasta el momento actual podemos usar la claúsula NOW() y el dia actual como CURDATE()
- SELECT COUNT(*) FROM wspr.rx WHERE time > '2025-06-13' AND time < NOW();
- SELECT COUNT(*) FROM wspr.rx WHERE time >= CURDATE() AND time < NOW();
Los spots de ayer mediante dos formulas equivalentes una de forma explicita con las fechas y otra de forma implicita resrandole 1 dia a la fecha actual DATEADD(day, -1, CURDATE()) y la fecha actual CURDATE()
- SELECT COUNT(*) FROM wspr.rx WHERE time >= '2025-06-23' AND time < '2025-06-24';
- SELECT COUNT(*) FROM wspr.rx WHERE time >= DATEADD(day, -1, CURDATE()) AND time < CURDATE();
Si se quiere conocer el numero de estaciones TX WSPR de las que se han recibido spots en un día en concreto:
- SELECT COUNT(DISTINCT tx_sign) FROM wspr.rx WHERE time > '2025-06-13' AND time < '2025-06-14'
El número de estaciones WSPR TX de las cuales se reciben spots en un día como el 13/6/2025 fue de 5.010, la media es de 711 spots/estación con un máximo de 167.328 de la estación WW0WWV (https://wwvarc.org/)
El número de estaciones RX WSPR se puede obtener con:
- SELECT COUNT(DISTINCT rx_sign) FROM wspr.rx WHERE time > '2025-06-13' AND time < '2025-06-14'
Si se quiere conocer el numero de spots recibidos de cada estación se puede hacer:
- SELECT tx_sign, COUNT(*) FROM wspr.rx WHERE time > '2025-06-13' AND time < '2025-06-14' GROUP BY tx_sign ORDER BY COUNT(*) DESC;
Como hay mas de 2.000 filas de resultado se genera un fichero descargable.
También podemos preguntar sobre el número de spots que recibe cada WSPR RX
- SELECT rx_sign, COUNT(*) FROM wspr.rx WHERE time > '2025-06-13' AND time < '2025-06-14' GROUP BY rx_sign ORDER BY COUNT(*) DESC;
![]() |
Hay unas 4 veces más de estaciones WSPR TX que de WSPR RX. |
Si queremos conocer el orden que ocupa cada estación hay que incluir una columna "row_number() OVER (ORDER BY COUNT(*) DESC) AS row_num":
- SELECT row_number() OVER (ORDER BY COUNT(*) DESC) AS row_num, tx_sign, COUNT(*) AS total FROM wspr.rx WHERE time > '2025-06-13' AND time < '2025-06-14' GROUP BY tx_sign ORDER BY COUNT(*) DESC;
Si se quiere conocer cuantas estaciones hay de EA(España)
- SELECT tx_sign, COUNT(*) FROM wspr.rx WHERE tx_sign LIKE 'EA%' AND time > '2025-06-13' AND time < '2025-06-14' GROUP BY tx_sign ORDER BY COUNT(*) DESC;
![]() |
Hay 16 estaciones WSPR TX en EA (España) Hay distritos sin ninguna estación WSPX TX como EA2, EA4, EA7, EA8 y EA9 |
- SELECT rx_sign, COUNT(*) FROM wspr.rx WHERE rx_sign LIKE 'EA%' AND time > '2025-06-13' AND time < '2025-06-14' GROUP BY rx_sign ORDER BY COUNT(*) DESC;
![]() |
Hay 11 estaciones WSPR RX en EA (España) Hay distritos sin ninguna estación WSPX RX como EA2, EA6 y EA9 |
Se puede limitar únicamente a los recibidos de una determinada estación (p.e. EA5JTT ) mediante "WHERE tx_sign='EA5JTT'" de la siguiente forma
- SELECT COUNT(*) FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-06-13' AND time < '2025-06-14';
- SELECT * FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-06-14 03:00:00' AND time < '2025-06-14 04:00:00';
- SELECT * FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-06-22 15:00:00' AND time < '2025-06-22 17:00:00' ORDER BY HOUR(time);
- SELECT DISTINCT rx_sign FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-06-23 00:00:00' AND time < '2025-06-23 23:59:59' ORDER BY HOUR(time);
- SELECT rx_loc, COUNT(*) FROM wspr.rx WHERE rx_loc LIKE 'IM99%' AND time > '2025-06-13' AND time < '2025-06-25' GROUP BY rx_loc ORDER BY COUNT(*) DESC;
- SELECT tx_loc, COUNT(*) FROM wspr.rx WHERE tx_loc LIKE 'IM99%' AND time > '2025-06-13' AND time < '2025-06-25' GROUP BY tx_loc ORDER BY COUNT(*) DESC;
- SELECT tx_loc, COUNT(*) FROM wspr.rx WHERE (tx_loc LIKE 'IM%' OR tx_loc LIKE 'IN%') AND time > '2025-06-23' AND time < '2025-06-24' GROUP BY tx_loc ORDER BY COUNT(*) DESC;
- SELECT rx_loc, COUNT(*) FROM wspr.rx WHERE (rx_loc LIKE 'IM%' OR rx_loc LIKE 'IN%') AND time > '2025-06-23' AND time < '2025-06-24' GROUP BY rx_loc ORDER BY rx_loc DESC;
- SELECT band, COUNT(*) FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' GROUP BY band;
- SELECT DATE(time), COUNT(*) FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' GROUP BY DATE(time);
- SELECT HOUR(time), COUNT(*) FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' GROUP BY HOUR(time);
- SELECT HOUR(time), band, COUNT(*) FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' GROUP BY HOUR(time), band ORDER BY HOUR(time), band;
- SELECT HOUR(time), COUNT(*) FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' AND band='14' GROUP BY HOUR(time), band ORDER BY HOUR(time), band;
- SELECT HOUR(time) AS hora, COUNT(CASE WHEN band = '3' THEN 1 END) AS 80m, COUNT(CASE WHEN band = '7' THEN 1 END) AS 40m, COUNT(CASE WHEN band = '10' THEN 1 END) AS 30m, COUNT(CASE WHEN band = '14' THEN 1 END) AS 20m, COUNT(CASE WHEN band = '18' THEN 1 END) AS 17m, COUNT(CASE WHEN band = '21' THEN 1 END) AS 15m, COUNT(CASE WHEN band = '24' THEN 1 END) AS 12m, COUNT(CASE WHEN band = '28' THEN 1 END) AS 10m, COUNT(CASE WHEN band <> '99' THEN 1 END) AS TOTAL FROM wspr.rx WHERE tx_sign = 'EA5JTT' AND time > '2025-06-23' AND time < '2025-06-24' GROUP BY HOUR(time) ORDER BY HOUR(time);
- SELECT MINUTE(time) AS Minutos, COUNT(CASE WHEN band = '3' THEN 1 END) AS 80m, COUNT(CASE WHEN band = '7' THEN 1 END) AS 40m, COUNT(CASE WHEN band = '10' THEN 1 END) AS 30m, COUNT(CASE WHEN band = '14' THEN 1 END) AS 20m, COUNT(CASE WHEN band = '18' THEN 1 END) AS 17m, COUNT(CASE WHEN band = '21' THEN 1 END) AS 15m, COUNT(CASE WHEN band = '24' THEN 1 END) AS 12m, COUNT(CASE WHEN band = '28' THEN 1 END) AS 10m, COUNT(CASE WHEN band <> '99' THEN 1 END) AS TOTAL FROM wspr.rx WHERE tx_sign = 'EA5JTT' AND time > '2025-06-24 00:00:00' AND time < '2025-06-25 00:00:00' GROUP BY MINUTE(time) ORDER BY MINUTE(time);
- SELECT DATE(time), band, COUNT(*) FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' GROUP BY DATE(time), band ORDER BY DATE(time),band;
- SELECT rx_sign, COUNT(rx_sign) FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' GROUP BY rx_sign ORDER BY COUNT(rx_sign) DESC;
- SELECT rx_sign,band, COUNT(rx_sign) FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' GROUP BY rx_sign, band ORDER BY COUNT(rx_sign) DESC;
- SELECT DATE(time) AS fecha, COUNT(CASE WHEN band = '3' THEN 1 END) AS band_3, COUNT(CASE WHEN band = '7' THEN 1 END) AS band_7, COUNT(CASE WHEN band = '10' THEN 1 END) AS band_10, COUNT(CASE WHEN band = '14' THEN 1 END) AS band_14, COUNT(CASE WHEN band = '18' THEN 1 END) AS band_18, COUNT(CASE WHEN band = '21' THEN 1 END) AS band_21, COUNT(CASE WHEN band = '24' THEN 1 END) AS band_24, COUNT(CASE WHEN band = '28' THEN 1 END) AS band_28, COUNT(CASE WHEN band <> '99' THEN 1 END) AS total FROM wspr.rx WHERE tx_sign = 'EA5JTT' AND time >= '2025-05-11' AND time < '2025-06-12' GROUP BY DATE(time) ORDER BY DATE(time);
- SELECT toString(DATE(time)) AS fecha, COUNT(CASE WHEN band = '3' THEN 1 END) AS band_3, COUNT(CASE WHEN band = '7' THEN 1 END) AS band_7, COUNT(CASE WHEN band = '10' THEN 1 END) AS band_10, COUNT(CASE WHEN band = '14' THEN 1 END) AS band_14, COUNT(CASE WHEN band = '18' THEN 1 END) AS band_18, COUNT(CASE WHEN band = '21' THEN 1 END) AS band_21, COUNT(CASE WHEN band = '24' THEN 1 END) AS band_24, COUNT(CASE WHEN band = '28' THEN 1 END) AS band_28, COUNT(CASE WHEN band <> '99' THEN 1 END) AS total FROM wspr.rx WHERE tx_sign = 'EA5JTT' AND time >= '2025-05-11' AND time < '2025-06-12' GROUP BY DATE(time) UNION ALL SELECT 'TOTAL' AS fecha, COUNT(CASE WHEN band = '3' THEN 1 END), COUNT(CASE WHEN band = '7' THEN 1 END), COUNT(CASE WHEN band = '10' THEN 1 END), COUNT(CASE WHEN band = '14' THEN 1 END), COUNT(CASE WHEN band = '18' THEN 1 END), COUNT(CASE WHEN band = '21' THEN 1 END), COUNT(CASE WHEN band = '24' THEN 1 END), COUNT(CASE WHEN band = '28' THEN 1 END), COUNT(CASE WHEN band <> '99' THEN 1 END) FROM wspr.rx WHERE tx_sign = 'EA5JTT' AND time >= '2025-05-11' AND time < '2025-06-12' ORDER BY fecha;
- SELECT version, COUNT(CASE WHEN version <> 'xxx' THEN 1 END) AS Total FROM wspr.rx WHERE tx_sign='EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' GROUP BY version ORDER BY version DESC;
- SELECT * FROM ( SELECT version, COUNT(*) AS Total FROM wspr.rx WHERE tx_sign = 'EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' AND version <> 'xxx' GROUP BY version UNION ALL SELECT 'TOTAL' AS version, COUNT(*) AS Total FROM wspr.rx WHERE tx_sign = 'EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' AND version <> 'xxx') ORDER BY version = 'TOTAL', Total DESC;
- SELECT * FROM ( SELECT version, count(*) AS Total, round(count(*) / total.total_count * 100, 2) AS Porcentaje FROM wspr.rx,( SELECT count(*) AS total_count FROM wspr.rx WHERE tx_sign = 'EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' AND version <> 'xxx' ) AS total WHERE tx_sign = 'EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' AND version <> 'xxx' GROUP BY version, total.total_count UNION ALL SELECT 'TOTAL' AS version, total_count AS Total, 100 AS Porcentaje FROM ( SELECT count(*) AS total_count FROM wspr.rx WHERE tx_sign = 'EA5JTT' AND time > '2025-05-11' AND time < '2025-06-12' AND version <> 'xxx' ) ) ORDER BY version = 'TOTAL', Total DESC;
- SELECT HOUR(time) AS hora, MAX(CASE WHEN band = '3' THEN distance END) AS "80m", MAX(CASE WHEN band = '7' THEN distance END) AS "40m", MAX(CASE WHEN band = '10' THEN distance END) AS "30m", MAX(CASE WHEN band = '14' THEN distance END) AS "20m", MAX(CASE WHEN band = '18' THEN distance END) AS "17m", MAX(CASE WHEN band = '21' THEN distance END) AS "15m", MAX(CASE WHEN band = '24' THEN distance END) AS "12m", MAX(CASE WHEN band = '28' THEN distance END) AS "10m" FROM wspr.rx WHERE tx_sign = 'EA5JTT' AND time >= '2025-06-23' AND time < '2025-06-24' GROUP BY HOUR(time) ORDER BY HOUR(time);
Comentarios
Publicar un comentario