SQL聚合函数最小值与组

时间:2014-10-26 10:53:10

标签: mysql aggregate-functions min

我有一张名为Price的表。其中包含ID,fkProductID(Products表的foregnkey),PriceDate,Price,fkStore(提供价格的供应商ID)

现在我需要找到每个月每种产品的最优价格以及供应商名称。 一些供应商也提供重复价格。例如,产品ID 8有两次1200(ID#8和3)。如果可能,我只需要显示第一个供应商或具有计数值的列。


ID  fkProductID PriceDate   Price   fkStore
-----------------------------------------------------
1   8           26-10-2014  1250    13
2   8           10-09-2014  1200    13
3   8           25-10-2014  1200    1
4   8           13-10-2014  1500    1
5   8           03-09-2014  1000    1
6   8           15-09-2014  1300    15
7   8           09-09-2014  950     21
8   8           10-10-2014  1200    23
9   8           09-09-2014  950     27

10  15          10-10-2014  3500    5
11  15          11-10-2014  3400    6
12  15          09-09-2014  3100    6
13  15          10-09-2014  3200    14
14  15          16-09-2014  3100    17
-----------------------------------------------------

我的预期结果。

-----------------------------------------------------
ID  fkProductID Month       Price   Supplier
-----------------------------------------------------
7   8           September   950     21
2   8           October     1200    1
13  15          September   3100    13
11  15          October     3400    6

=============================================== ==================

SCHEMA

SQL FIDDLE

1 个答案:

答案 0 :(得分:0)

您可以使用substring_index() / group_concat()技巧做到您想要的一切:

select substring_index(group_concat(idPrices order by Price, idPrices), ',', 1) as id,
       fkProductId, monthname(PriceDate) as mon,
       min(Price) as price,
       substring_index(group_concat(fkStore order by Price, idPrices), ',', 1) as spec_id
from prices p
group by fkProductId, monthname(PriceDate);