我是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/