2016-12-06 5 views
0

私はMySQL/PHP分野を初めて使い、自分で学習します。私が出荷された項目のデータをプルしようとしています、ここで私が使用していますクエリです: -MYSQL文が正しいvauleを表示していない

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 

私は私moved_to = 'shipped', qty_comp > 0との最後のエントリが表示されない、正しいSUM(scrap)SUM(job_time)job_numbersを受けます。それはjob_numberの最初のスキャンの最初のエントリを示しています。

ご協力いただきありがとうございます。

答えて

0

クエリが(サブクエリを必要とせず)のように書き換えることができる:

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」の条件は、(によってグループ)のみjobs.job_number job_numberによるもので必要と凝集ためませんSUM(jobs.scrap)、SUM(jobs.job_time)は意味のある値を持ちます。

列jobs.employee_end、jobs.qty_comp、jobsのためです。 dateは、複数の行から集計されますが、集計では1つの値しか得られません。この場合は最初の値になります。これらの列にMAX集計を追加することで、おそらく最後に得られる価値が得られます。

+0

ご協力ありがとうございます – flying23x

+0

a.job_number、b.employee_end、b.qty_comp、b.'date'、a.job_scrap、a.job_timeを選択してください(jobs.job_number、SUM(jobs.scrap)をjob_scrapとして選択、ジョブ(jobs.job_time)をjob_time FROM jobs jobs.job_number in(select j.job_number FROM jobs j where j.moved_to = 'shipped' AND j.date BETWEEN%s AND j.qty_comp> 0)GROUP BY jobs.job_number)をaとし、ジョブbをa.job_number = b.job_number、b.moved_to = 'shipped'とし、%s AND%sとb.qty_comp> 0の間のb.dateをb.job_numberによってグループ化します。 – flying23x

+0

それをアップヴォートするか、答えを受け入れることができればそれです。ありがとう。 –

関連する問題