Quiero seleccionar la suma de piezas para un caso específico que comparte el mismo trabajo. Pero solo quiero el resultado para el trabajo más alto.

Tengo la siguiente tabla (3dprint)

+------+---------+-----------+--------+
| p_id | case_id | Qty_piece | job_id |
+------+---------+-----------+--------+
|    1 |     186 |         1 |      5 |
|    2 |     186 |         2 |      5 |
|    3 |     186 |         4 |      7 |
+------+---------+-----------+--------+

Así que intenté

SELECT SUM(Qty_piece) FROM 3dprint
WHERE 3dprint_caseID = 186 
ORDER BY 3dprint_jobID DESC LIMIT 1

Pero me da 7. Quiero el 4. ¿Cómo proceder para que esto funcione?

-1
Atnaize 27 ene. 2016 a las 19:36

2 respuestas

La mejor respuesta

Mientras que @P. La respuesta de Jairaj es correcta, no hay necesidad de agrupar si en realidad siempre enviará el case_id. Utilice una consulta más sencilla de la siguiente manera.

SELECT Qty_piece FROM 3dprint
WHERE case_id = 186  and job_id in (select max(job_id) from 3dprint where case_id = 186)

Y usar su consulta con pequeñas correcciones de errores tipográficos y eliminar la función de suma ya que es irrelevante:

SELECT Qty_piece FROM 3dprint
WHERE case_id = 186 
ORDER BY job_id DESC LIMIT 1

Ya está ordenando por job_id y limitando a 1, por lo que no necesita la función de suma. Utilice la función de suma solo cuando desee sumar todos los valores (totalización)

0
davejal 27 ene. 2016 a las 17:02

Esto debería funcionar:

SELECT SUM(Qty_piece) FROM 3dprint
WHERE 3dprint_caseID = 186 
Group by 3dprint_caseID
Having job_id = max(job_id)
ORDER BY 3dprint_jobID DESC LIMIT 1
1
P. Jairaj 27 ene. 2016 a las 16:41