2012-02-14 16 views
0

これを解決しようとしてから3-4日後、私はあきらめています。 私は1つのテーブルで始めましたが、今ではそれを大きく変更して2つのテーブルを持つことができました。私のような新人にとってはもっと簡単にできると思っていました。 See my earlier post here参加と計算の問題

の代わりに、ここですべてのテーブルの詳細を掲示する私はスクリーンショットを提供しています: Tables and expected result

を、私はこれでかなり遠く来て管理しているが、問題は、私は除いて計算を行うことはできませんよということです含まれてはならないバッチ。

どうすればこの問題を解決できますか?私はあなたから手伝ってくれて本当に感謝しています。事前に おかげ

答えて

1

まずステップ:詳細テーブル用のフィルタを作成します

SELECT 
    MAX(id) AS id 
FROM details 
GROUP BY `concat`, `batch` 

次のステップ:詳細テーブルに照会し、これを使用し

SELECT * FROM details 
WHERE id IN (
    SELECT 
     MAX(id) AS id 
    FROM details 
    GROUP BY `concat`, `batch` 
) 

次のステップ:この派生テーブルを使用しますあなたの最終結果にマスターテーブルに参加する

SELECT 
    `master`.id AS id, 
    `master`.plant AS plant, 
    `master`.`code` AS `code`, 
    COUNT(*) AS distinct_batches, 
    SUM(filtereddetails.volume) AS total_vol, 
    SUM(filtereddetails.`value`) AS total_val, 
    SUM(filtereddetails.volume*filtereddetails.risk) AS risk_vol, 
    SUM(filtereddetails.`value`*filtereddetails.risk) AS risk_val, 
    MAX(filtereddetails.end_date-filtereddetails.start_date) AS max_date_diff 
FROM 
    `master` 
    INNER JOIN (
    SELECT * FROM details 
    WHERE id IN (
     SELECT 
      MAX(id) AS id 
     FROM details 
     GROUP BY `concat`, `batch` 
    ) 
) AS filtereddetails ON `master`.`concat`=filtereddetails.`concat` 
GROUP BY 
    `master`.`concat` 
+0

ありがとう。私はもう一度家にいるとすぐにそれを試してみる。論理は私が探しているもののようです。 – Josef

+0

Yupp、あなたは素晴らしいです!最後に私の問題は解決しました:) – Josef