2015-10-15 69 views
1

我有一個如下表。MySql多列子查詢

Gowden | Year Month Stock Item Plan_Stock(In Tons) Avail_Stock(In Tons) 
GD1 | 2015 | Jun | White Rice | 20    | 15 
GD1 | 2015 | Jun | Wheat  | 20    | 20 
GD1 | 2015 | Jun | Brown Rice | 10    | 10 
GD2 | 2015 | Jun | White Rice | 20    | 20 
GD2 | 2015 | Jun | Wheat  | 20    | 10 
GD1 | 2015 | Jan | White Rice | 20    | 10 
GD1 | 2015 | Jan | Wheat  | 20    | 10 
GD1 | 2015 | Jan | Brown Rice | 10    | 5 
GD2 | 2015 | Jan | White Rice | 20    | 20 
GD2 | 2015 | Jan | Wheat  | 20    | 20 
GD2 | 2015 | Jan | Brown Rice | 10    | 10 
GD3 | 2015 | Jan | White Rice | 20    | 5 
GD3 | 2015 | Jan | Wheat  | 20    | 5 
GD3 | 2015 | Jan | Brown Rice | 10    | 5 
GD1 | 2014 | Jun | White Rice | 15    | 10 
GD2 | 2014 | Jun | White Rice | 15    | 10 
GD3 | 2014 | Jun | White Rice | 15    | 10 

我想製作一個視圖,它將計算最近可用的計劃Vs可用庫存項目的百分比。不管列表中的項目如何。示例是GD1最近更新爲2015年6月20 + 20 + 10 = 50噸計劃。 15 + 20 + 10 = 45噸。因此計劃的可用比例爲90%。如下圖所示。

Gowden | Year Month Stock % Precent 
GD1 | 2015 | Jun |  90%  | 
GD2 | 2015 | Jun |  75%  | 
GD3 | 2015 | Jan |  30%  | 

有沒有什麼辦法可以在一個視圖中做到這一點,或者我需要編寫腳本來計算?感謝並提前感謝所有人。

回答

0

我試了兩次查詢。 1)SELECT gowden,year,month,100 * sum(avail_stock)/ sum(plan_stock) FROM your_table GROUP BY gowden HAVING year = max(year)and str_to_date(month,'%b')= max(str_to_date (月,'%b'))

!工作,但我看到的問題是一些gowdens失蹤。我不知道爲什麼。

2)選擇gowden,年,月,100 *總和(avail_stock)/ SUM(plan_stock) 從your_table 組由gowden,年,月HAVING年= MAX(年)和STR_TO_DATE(月,'%B ')= max(str_to_date(month,'%b'))ORDER BY gowden ASC,year,month DESC。

已經工作但不僅是最近一個月,所有月份的數據都會到來,但從最近的年份和月份開始排序。 從我得到的看法我可以查詢它得到一個,每個gowden最近的數據。

感謝Pablo Santa和Hitesh。

0

試試這個:

select gowden, year, month, 100*sum(avail_stock)/sum(plan_stock) 
    from your_table 
group by gowden, year, month 
+0

哇非常感謝。它的工作原理,但我只需要最近一排每個gowden。在一年之內,將會有兩三次更新。 – Lohith

0

我試圖設置計算策略。我沒有你的模式,所以我無法測試。可能需要將monthyear轉換爲date type,然後應用max函數。

SELECT gowden, year, month, 100*sum(avail_stock)/sum(plan_stock) 
FROM your_table 
GROUP BY gowden 
HAVING year=max(year) and month=max(month) 
+0

非常感謝。由於月份不是數字1,因此最近(月份)沒有給出確切的最近月份。嘗試使用month = max(STR_TO_DATE('month','%M'))和month = date_format(max(STR_TO_DATE('month','%M')),'%M')。但最近一個月沒有回升。 – Lohith