Encadenar declaraciones SQL, mientras que cada una pueda funcionar de forma independiente.
Usando Python (o cualquier pseudo código) estoy tratando de encontrar una forma utilizando CTE (o sin ella) para crear funciones en las que cada consulta tenga un objetivo específico, pero cada una también pueda servir como columna base para otra consulta.
No estoy seguro si hay un término para este tipo de algoritmo.
Por ejemplo, algunos usuarios quieren encontrar una caída del 5% en una columna ‘close’ de una curva, otros quieren encontrarlo sobre una columna ‘sma’ (media móvil simple) de esa misma curva, y otros solo quieren la media móvil simple.
// Esto puede encontrar la media móvil por sí sola, o puede devolver una consulta como base para otra
def obtenerConsultaSMA():
e = (”’
SELECT date, date_num, s, close,
avg(close) OVER (ORDER BY date_num
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as sma
FROM history
”’)
return e //o ejecutar e
// Esto puede encontrar una caída en la curva en la columna sma como base, o en la tabla original
def encontrarCaída(sma):
e = (”’
WITH WIN AS (
SELECT date, date_num, s, close,
LAG(close,3) OVER (ORDER BY date_num) w0. //*** aquí LAG puede ser utilizado en la columna sma o en la columna close basado en el argumento sma
FROM {base}
WHERE s = ‘A’
), TRD AS(
SELECT date,date_num, s, close, 100*(close-w0)/close change
FROM WIN
WHERE w0 IS NOT NULL
), FRST AS(
SELECT date,date_num, s, close, change,
LAG(change,1) OVER (ORDER BY date_num) final_lag
FROM TRD
)
SELECT date,date_num, s, close, change, final_lag
FROM FRST
WHERE Abs(change) > 15 AND Abs(final_lag) < 15
''')
Entonces me gustaría encontrar una forma de concatenar la cadena de consulta de sma en esta consulta, de manera que pueda decidir si quiero ejecutar la segunda consulta donde LAG está en la columna ‘close’ o en el resultado de la columna ‘sma’.
davy.ai
Para concatenar la cadena de consulta
sma
en la segunda consulta, puedes modificar la funciónfindDrop
para que acepte un argumento opcionalsma
. Si se proporciona el argumento, la cadena de consultasma
se concatenará en la expresión de tabla comúnWIN
en lugar de utilizar la tabla originalhistory
. Aquí tienes una versión actualizada de la funciónfindDrop
:Ahora puedes llamar a
findDrop()
sin argumentos para usar la tabla originalhistory
, o consma=getquerySMA()
para usar la consultasma
como la tabla base para la expresión de tabla común. Por ejemplo: