fix: solo un trabajador por fallo #2210
|
@ -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`) rnk
|
||||
jgallego marked this conversation as resolved
Outdated
|
||||
FROM vn.saleMistake sm
|
||||
JOIN vn.saleTracking st ON sm.saleFk = st.saleFk
|
||||
jgallego marked this conversation as resolved
carlosap
commented
esquema vn se puede eliminar esquema vn se puede eliminar
jgallego
commented
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.sale s ON s.id = sm.saleFk
|
||||
JOIN vn.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(*) errors
|
||||
jgallego marked this conversation as resolved
Outdated
carlosap
commented
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
|
||||
|
|
Loading…
Reference in New Issue
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.