Concurso de preguntas SPL de código abierto de la Copa Nezha

contenido

1. Reglas de la competencia

Hay 3 temas en esta competencia. Se proporcionarán archivos de datos y soluciones SQL de referencia. Los concursantes deben escribir scripts SPL que arrojen los mismos resultados.

Se puede suponer que todos los datos caben en la memoria y que el código no tiene que considerar los cálculos fuera de la memoria.

Finalmente, envíe el archivo de script SPL (.splx).

2. Mecanismo de recompensa

1. Hay tres ganadores para cada tema

El primero en dar la respuesta correcta (sujeto al momento de enviar el correo electrónico); la recompensa es de 1000 yuanes en efectivo;
en una base correcta, el código es el más conciso (se puede entender como corto, por supuesto, corto los nombres de variables conducen a códigos cortos y sin significado); recompensa 1500 yuanes en efectivo;
en la base correcta, el código es el más eficiente (puede entenderse como rápido, pero aquí debido a la pequeña cantidad de datos, el tiempo de ejecución de la prueba tendrá mayor aleatoriedad, y solo se puede evaluar el cálculo del código); la recompensa es de 1500 yuanes en efectivo;
para los puntos 2 y 3, si las puntuaciones de las dos respuestas son iguales, la respuesta recibida primero gana (sujeto hasta el momento en que se envía el correo electrónico).

2. Para todos los concursantes que no ganaron el premio, se sortearán 30 premios afortunados, cada uno de los cuales será recompensado con un mouse inalámbrico Logitech Bluetooth;

3. Descripción de los datos

1. Datos en formato de archivo de conjunto SPL

Datos en el formato de archivo de conjunto SPL

2. Ejecute el script en esProc (es decir, entorno operativo SPL) para escribir datos en la base de datos (tome MySQL como ejemplo)

secuencia de comandos SPL

4. Ejemplos (solo como referencia)

Encuentre acciones que subieron el 18 de marzo de 2021 (la fecha se puede usar como parámetro) y han estado subiendo durante 4 días consecutivos o más (el número de días se puede usar como parámetro) y los correspondientes días subiendo consecutivos.

SQL de referencia (usando MySQL versión 8 y superior, lo mismo a continuación)

with recursive
t1 as (select *, row_number() over(partition by code order by tdate) rn
from stock),
		t2 as (select *
from t1 where tdate='2021-03-18'
union all
select t1.*
from t2 join t1 on t2.code=t1.code and t2.rn=t1.rn+1
where t2.price>t1.price) 
select code,count(1)-1 cnt
from t2
group by code
having cnt>=4;

Solución SPL de referencia

UN
1 2021-03-18
2 =T(“datos.btx”).select(tdate<=A1).sort(código,-tdate)
3 =A2.grupo@o(código).select(tdate==A1)
4 =A3.nuevo(código,~.pselect(precio<=precio[1])-1:cnt)
5 =A4.seleccionar(cnt>=4)

5. Preguntas para este concurso

1. Entre las acciones que subieron el jueves y viernes pasados, no tuvieron suspensión de cotización esta semana y subieron durante al menos 4 días, subieron más del 1 % el lunes y subieron más del 3 % en un día, la probabilidad de la mayor subida superando el 10% en las próximas dos semanas ¿Qué tan grande es?

SQL de referencia:

with 
#dayofweek('1970-01-04')=1, 周日
    t1 as (select *, datediff(tdate,'1970-01-04') div 7 as w,
        price/lag(price) over(partition by code order by tdate) rise
    from stock),
t2 as (select t1.code, t1.w, count(1) z0, sum(if(t1.rise>1,1,0)) z1,
        sum(if(dayofweek(t1.tdate)=2 and t1.rise>1.01,1,0)) z2,
        sum(if(dayofweek(t1.tdate)<>2 and t1.rise>1.03,1,0)) z3
    from t1 join t1 e1 on t1.code=e1.code and t1.w=e1.w+1
        join t1 e2 on t1.code=e2.code and t1.w=e2.w+1
    where dayofweek(e1.tdate)=5 and e1.rise>1
        and dayofweek(e2.tdate)=6 and e2.rise>1
    group by code, w
    having z0=5 and z1>=4 and z2=1 and z3>=1),
t4 as (select code, w, max(if(dayofweek(tdate)=6,price,null)) price5, max(price) h
    from t1 group by code, w),
t5 as (select code, w, price5, lead(h) over(partition by code order by w) h1,
        lead(h,2) over(partition by code order by w) h2
    from t4),
t6 as (select count(1) n
    from t5 join t2 using (code,w)
    where t5.h1/t5.price5>1.1 or t5.h2/t5.price5>1.1)
select n/(select count(1) from t2) p from t6;

2. Hay cinco eventos de arriba> 5%, abajo> 5%, arriba> 5%, abajo> 5%, arriba> 5%, calcule en el primer trimestre de 2021 (el período de tiempo se puede usar como un parámetro) durante unos 20 días determinados (el número de días se puede utilizar como parámetro) ¿Cuántas acciones tienen los primeros 1, 2, 3, 4 y 5 eventos ocurridos en secuencia?

SQL de referencia:

with
    q as (select *, row_number() over(partition by code order by tdate) n,
            price/lag(price) over(partition by code order by tdate) rise
        from stock),
    q0 as (select * 
        from q where tdate between '2021-01-01' and '2021-03-31'),
    q1 as (select code, n, 20-1 rg  #range是mysql关键字
        from q0 where rise>1.05),
    q2 as (select q0.code, q0.n, q1.rg+q1.n-q0.n rg
        from q0 join q1 on q0.code=q1.code and q0.n between q1.n+1 and q1.n+q1.rg
        where q0.rise<0.95),
    q3 as (select q0.code, q0.n, q2.rg+q2.n-q0.n rg
        from q0 join q2 on q0.code=q2.code and q0.n between q2.n+1 and q2.n+q2.rg
        where q0.rise>1.05),
    q4 as (select q0.code, q0.n, q3.rg+q3.n-q0.n rg
        from q0 join q3 on q0.code=q3.code and q0.n between q3.n+1 and q3.n+q3.rg
        where q0.rise<0.95),
    q5 as (select q0.code, q0.n, q4.rg+q4.n-q0.n rg
        from q0 join q4 on q0.code=q4.code and q0.n between q4.n+1 and q4.n+q4.rg
        where q0.rise>1.05)
select (select count(distinct code) from q0) n0,
    (select count(distinct code) from q1) n1,
    (select count(distinct code) from q2) n2,
    (select count(distinct code) from q3) n3,
    (select count(distinct code) from q4) n4,
    (select count(distinct code) from q5) n5;

3. En el primer trimestre de 2021 (el período de tiempo se puede usar como parámetro), seleccione una acción con el límite de precio más bajo y una acción con el límite de precio más alto todos los días, y si el precio de la primera es más bajo que ese de este último, si no se hallare idóneo No elegido en el día. Para evitar la ambigüedad que provoca la precisión, se considera aquí que el precio límite supera el 9,5%.

SQL de referencia:

with
    q as (select *, price/lag(price) over(partition by code order by tdate) rise
        from stock),
    q1 as (select tdate, first_value(code) over(w1) code1, first_value(price) over(w1) price1
        from q
        where tdate between '2021-01-01' and '2021-03-31' and rise>1.095
        window w1 as (partition by tdate order by price)),
    q2 as (select * from q1 group by tdate),
    q3 as (select tdate, first_value(code) over(w2) code2, first_value(price) over(w2) price2
        from q
        where tdate between '2021-01-01' and '2021-03-31' and rise<0.905
        window w2 as (partition by tdate order by price desc)),
    q4 as (select * from q3 group by tdate)
select q2.tdate, q2.code1, q2.price1, q4.code2, q4.price2
from q2 join q4 using (tdate)
where q2.price1<q4.price2
order by tdate;

6. Referencias

Introducción a SPL

Dirección de descarga de SPL

Dirección de fuente abierta de SPL

Camino al aprendizaje de SPL

Configuración de conexiones de base de datos en SPL

materiales de estudio SPL

7. Tiempo y método de competición

Hora del evento: 15 de abril al 12 de mayo
Método de participación: Enviar las respuestas al buzón de acuerdo con los requisitos de respuesta: [email protected]
Anuncio de la lista: Los ganadores se anunciarán en el sitio web oficial a tiempo de acuerdo con las respuestas, y serán anunciado en mayo Todos los premios se anunciarán antes del día 13.
Distribución de recompensas: antes del 20 de mayo

8. Método de registro

Concurso de preguntas SPL de código abierto de la Copa Nezha
inserte la descripción de la imagen aquí

Preste atención al número público: programación Nezha

La programación de Nezha actualiza artículos de alta calidad todas las semanas. Después de prestar atención, responda a [CSDN] para recibir mapas mentales de Java, materiales de aprendizaje de Java y materiales de entrevistas masivas.

 

Agrégame WeChat: 18525351592

Ingrese al grupo de intercambio técnico, hay muchos peces gordos técnicos en el grupo, intercambien tecnología juntos, avancen juntos, ingresen juntos a la gran fábrica y también compren libros técnicos gratis ~~

Supongo que te gusta

Origin blog.csdn.net/guorui_java/article/details/124230314
Recomendado
Clasificación