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 2 additions and 2 deletions
Showing only changes of commit 1472fc6fc2 - Show all commits

View File

@ -37,7 +37,7 @@ BEGIN
WITH rankedWorkers AS ( WITH rankedWorkers AS (
SELECT sm.id, SELECT sm.id,
st.workerFk, st.workerFk,
ROW_NUMBER() OVER(PARTITION BY sm.id ORDER BY s2.`order`) AS rnk ROW_NUMBER() OVER(PARTITION BY sm.id ORDER BY s2.`order`) 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 vn.saleMistake sm FROM vn.saleMistake sm
JOIN vn.saleTracking st ON sm.saleFk = st.saleFk JOIN vn.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 vn.`state` s2 ON s2.id = st.stateFk JOIN vn.`state` s2 ON s2.id = st.stateFk
@ -46,7 +46,7 @@ BEGIN
WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo WHERE t.shipped BETWEEN vDatedFrom AND vDatedTo
AND s2.code IN ('OK', 'PREVIOUS_PREPARATION', 'PREPARED', 'CHECKED') AND s2.code IN ('OK', 'PREVIOUS_PREPARATION', 'PREPARED', 'CHECKED')
) )
SELECT workerFk, COUNT(*) AS errors SELECT workerFk, COUNT(*) errors
jgallego marked this conversation as resolved Outdated

El AS no es necesario

El AS no es necesario
FROM rankedWorkers FROM rankedWorkers
WHERE rnk = 1 WHERE rnk = 1
GROUP BY workerFk; GROUP BY workerFk;