2015-10-15 77 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