我是MySQL / PHP领域的新手,自己学习。我正在尝试提取运输物品的数据,这是我正在使用的查询:-

select jobs.job_number, jobs.employee_end, jobs.qty_comp, jobs.`date`,SUM(jobs.scrap), SUM(jobs.job_time)
FROM jobs where jobs.job_number in (
SELECT j.job_number FROM jobs j
 WHERE j.moved_to = 'shipped'
   AND j.`date` BETWEEN '2016-11-28' AND '2016-12-02'
   AND j.qty_comp > 0
)
GROUP BY jobs.job_number


我收到正确的SUM(scrap)SUM(job_time)job_numbers,它没有向我显示moved_to = 'shipped', qty_comp > 0的最后一个条目。它显示了job_number第一次扫描的第一个条目。

感谢您的帮助和建议。

最佳答案

可以将查询重写为(不需要子查询):

SELECT jobs.job_number, jobs.employee_end, jobs.qty_comp, jobs.`date`,
SUM(jobs.scrap), SUM(jobs.job_time)
FROM jobs AS j
WHERE j.moved_to = 'shipped' AND
j.`date` BETWEEN '2016-11-28' AND '2016-12-02' AND
j.qty_comp > 0
GROUP BY jobs.job_number


“ IN”条件不是必需的,因为聚合(分组依据)仅是job_number,而job.job_number,SUM(jobs.scrap),SUM(jobs.job_time)将具有有意义的值。

由于列jobs.employee_end,jobs.qty_comp,jobs。date将来自多行,因此聚合只能提供1值,在这种情况下为第一个值。您可以通过在这些列上添加MAX聚合来获得最后一个值。

关于php - MYSQL语句未向我显示正确的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40988551/

10-13 01:56