2012-02-13 35 views
0

我有一個表(只能有一個),看起來像下面看到的。自我加入問題,我想?

它包含工廠代碼,物品編號和與該物品相關的批次。

plant - code - batch - value - volume - added_date 
A1  1000 A1  10  20  date 
A1  2000 A7  20  15  date 
A1  1000 A1  5  10  later than first A1 batch 
A2  200 A8  10  9  date 
A1  2000 A10  20  20  date 

我怎麼會出現這樣的信息:每個工廠和代碼,顯示DISTINCT批數和僅新增加了一批體積(注意代碼1000 plant A1只顯示10作爲是最新添加的批量)。

plant - code - batches - volume 
    A1  1000 1   10  
    A1  2000 2   35 
    A2  200 1   9 

我從這裏早的人一些幫助,而且查詢的偉大工程,直到我試圖擺脫只有最新的批卷,如果有兩個批次與在同一植物的相同產品相同數量。

SELECT code, plant, 
    COUNT(DISTINCT(batch)) as Batches, 
    SUM(value) as TotalValue, 
    SUM(volume) as TotalVolume, 
    SUM(value * risk) as TotalRisk, 
FROM lists 
GROUP BY code, plant 

我想你可以用一些CONCAT和自我做其加入,但我沒有足夠的技術,只有一個表的工作:/

提前感謝!

編輯:恩,實際上阿德里安聯繫的答案解決了所描述的問題......但似乎很難做到讓所有其他解決方案都能正常工作。我只描述了我的「問題」的一部分,我認爲足以讓我自己解決其他問題。但是我錯了。我不僅需要最新添加的批次和體積,還需要對批次執行一些SUM操作。我認爲將數據放在兩個不同的表格中並從那裏工作可能是最好的選擇。

+1

你有你的手[標籤:最大正每組]問題。我沒有時間爲您編寫一份量身定做的答案,請花些時間閱讀這裏:http://stackoverflow.com/a/7745635/570191。它會引導你到正確的答案 – 2012-02-13 19:30:23

+0

謝謝阿德里安,我會讀到的!首先,我擔心你會說我的問題沒有解決方案:) – Josef 2012-02-13 19:45:38

+0

別擔心,還有更多的方法來解決你的問題:)不要忘記upvote如果答案在那裏幫助你 – 2012-02-13 19:53:11

回答

0

下面是一個使用子查詢JOIN其檢索由MAX(added_date)體積的可能性:

SELECT 
    l.code, 
    l.plant, 
    COUNT(DISTINCT l.batch) AS Batches, 
    lvol.vol AS volume 
FROM 
    lists l JOIN (
    SELECT code, plant, volume AS vol FROM lists GROUP BY code, plant HAVING added_date = MAX(added_date) 
) lvol ON l.code = lvol.code AND l.plant = lvol.plant AND l.volume = lvol.volume 
GROUP BY l.code, l.plant 
+0

這沒有奏效。它忽略了我們擁有兩個相同批次的產品的工廠,在這種情況下工廠A1根本沒有顯示出來:/ – Josef 2012-02-13 19:44:00

+0

@Josef查看對連接「ON」子句的更改。增加了'AND l.volume = lvol.volume' – 2012-02-13 19:54:04

0
SELECT t.*, 
     (SELECT volume 
      FROM lists 
      WHERE plant = t.plant 
      AND code = t.code 
      ORDER BY added_date DESC 
      LIMIT 1 --Take the latest record for the plant & code 
     ) AS volume     
    FROM (
      SELECT code, plant, 
       COUNT(DISTINCT(batch)) as Batches, 
       SUM(value) as TotalValue, 
       SUM(value * risk) as TotalRisk 
      FROM lists 
      GROUP BY code, plant 
     ) AS t 
+0

給我一個我無法解決的錯誤「FROM lists」。 – Josef 2012-02-13 19:48:07

+0

@Josef:更新了答案。 – Akhil 2012-02-13 19:58:43

+0

這比較好。在TotalRisk之後刪除「,」。但是,即使包含在我的示例中,我也需要爲值做同樣的事情。當我有了一些基本知識後,我認爲自己能夠弄清楚自己。但是用這個查詢並不那麼簡單。 – Josef 2012-02-13 20:18:41