2012-02-14 84 views
0

好吧,经过3-4天试图解决这个问题,我放弃了。 我开始时只有一张桌子,但现在我已经改变了很多,所以我能够有两张桌子,我认为这会让像我这样的菜鸟更容易。 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

非常感谢Eugen。我一回到家就会尝试。逻辑似乎是我正在寻找的。 – Josef 2012-02-15 09:41:13

+0

尤普,你真了不起!最后我的问题解决了:) – Josef 2012-02-15 17:47:06