fix: solo un trabajador por fallo #2210

Merged
jgallego merged 4 commits from 6782-productionError_add into dev 2024-03-27 06:24:26 +00:00
1 changed files with 16 additions and 10 deletions
Showing only changes of commit e47b8c1056 - Show all commits

View File

@ -34,16 +34,22 @@ BEGIN
-- Rellena la tabla tmp.errorsByChecker con fallos de revisores
CREATE OR REPLACE TEMPORARY TABLE tmp.errorsByChecker
ENGINE = MEMORY
SELECT st.workerFk,
COUNT(t.id) errors
FROM saleMistake sm
JOIN saleTracking st ON sm.saleFk = st.saleFk
JOIN `state` s2 ON s2.id = st.stateFk
JOIN sale s ON s.id = sm.saleFk
JOIN ticket t on t.id = s.ticketFk
WHERE (t.shipped BETWEEN vDatedFrom AND vDatedTo)
AND s2.code IN ('OK','PREVIOUS_PREPARATION','PREPARED','CHECKED')
GROUP BY st.workerFk;
WITH rankedWorkers AS (
SELECT sm.id,
st.workerFk,
ROW_NUMBER() OVER(PARTITION BY sm.id ORDER BY s2.`order`) AS rnk
jgallego marked this conversation as resolved Outdated

en este caso RANK() seria más apropiado?

en este caso RANK() seria más apropiado?

ChatGpt, pero crec que el rank en el meu cas no em val.

Sí, puedes utilizar la función RANK() en lugar de ROW_NUMBER() para lograr un propósito similar, pero hay una diferencia importante entre estas dos funciones que puede afectar el resultado dependiendo de lo que necesitas:

ROW_NUMBER() asigna un número único a cada fila dentro de la partición de acuerdo con el criterio de ordenación especificado. Esto significa que incluso si dos filas tienen el mismo valor en las columnas de ordenación, cada una recibirá un número de fila diferente.

RANK() asigna el mismo rango a filas que tienen los mismos valores en las columnas de ordenación, con huecos en la secuencia de rangos si hay empates. Por ejemplo, si dos filas están empatadas en el primer lugar, ambas recibirán el rango 1, y el siguiente rango sería 3, no 2.

Dependiendo de tu caso de uso específico, el uso de RANK() podría significar que si hay varios trabajadores con el mismo valor de orden para un id de saleMistake, todos recibirán el mismo rango. Si deseas considerar a todos los trabajadores que comparten el valor más alto (o más bajo, según el orden) en el conjunto de order para un id específico, RANK() sería la función adecuada.

ChatGpt, pero crec que el rank en el meu cas no em val. Sí, puedes utilizar la función RANK() en lugar de ROW_NUMBER() para lograr un propósito similar, pero hay una diferencia importante entre estas dos funciones que puede afectar el resultado dependiendo de lo que necesitas: ROW_NUMBER() asigna un número único a cada fila dentro de la partición de acuerdo con el criterio de ordenación especificado. Esto significa que incluso si dos filas tienen el mismo valor en las columnas de ordenación, cada una recibirá un número de fila diferente. RANK() asigna el mismo rango a filas que tienen los mismos valores en las columnas de ordenación, con huecos en la secuencia de rangos si hay empates. Por ejemplo, si dos filas están empatadas en el primer lugar, ambas recibirán el rango 1, y el siguiente rango sería 3, no 2. Dependiendo de tu caso de uso específico, el uso de RANK() podría significar que si hay varios trabajadores con el mismo valor de orden para un id de saleMistake, todos recibirán el mismo rango. Si deseas considerar a todos los trabajadores que comparten el valor más alto (o más bajo, según el orden) en el conjunto de order para un id específico, RANK() sería la función adecuada.
FROM saleMistake sm
JOIN saleTracking st ON sm.saleFk = st.saleFk
jgallego marked this conversation as resolved
Review

esquema vn se puede eliminar

esquema vn se puede eliminar
Review

dins dels WITH si no es posa l'esquema myt falla.

dins dels WITH si no es posa l'esquema myt falla.
JOIN `state` s2 ON s2.id = st.stateFk
JOIN sale s ON s.id = sm.saleFk
JOIN ticket t ON t.id = s.ticketFk
WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo
AND s2.code IN ('OK', 'PREVIOUS_PREPARATION', 'PREPARED', 'CHECKED')
)
SELECT workerFk, COUNT(*) AS errors
jgallego marked this conversation as resolved Outdated

El AS no es necesario

El AS no es necesario
FROM rankedWorkers
WHERE rnk = 1
GROUP BY workerFk;
-- Rellena la tabla tmp.expeditionErrors con fallos de expediciones
CREATE OR REPLACE TEMPORARY TABLE tmp.expeditionErrors