如何获取mysql中每个组的最低值

时间:2016-08-01 16:28:46

标签: php mysql

我希望从两个表中获得每组的最低值

表格低于

    Table 1                         Table 2         
|   GPN |   Amt |           |   GPN |   Date        |
|   A   |   10  |           |   A   |   2016-09-10  |
|   A   |   15  |           |   A   |   2016-09-18  |
|   A   |   20  |           |   B   |   2016-09-10  |
|   A   |   25  |           |   B   |   2016-09-11  |
|   A   |   30  |           |   B   |   2016-09-12  |
|   B   |   20  |           |   C   |   2016-10-12  |
|   B   |   40  |           |   C   |   2016-10-13  |
|   B   |   60  |           |   C   |   2016-10-14  |
|   B   |   80  |           |   D   |   2016-09-10  |
|   B   |   100 |           |   D   |   2016-10-13  |
|   C   |   3   |                           
|   C   |   6   |                           
|   C   |   9   |                           
|   C   |   12  |                           
|   C   |   15  |                           
|   D   |   7   |                           
|   D   |   10  |                           
|   D   |   13  |                           
|   D   |   16  |                           
|   D   |   19  |                           
|   D   |   22  |                           

我多么想要那个价值

例如

日期= 2016-09-10,

那有多少GPN,所以我必须得到每个GPN的最低Amt

所以结果将是这样的

    Result          
|   GPN |   Amt |
|   A   |   10  |
|   B   |   20  |
|   D   |   7   |

我尝试过使用 ASC LIMIT 1 ,所以很明显它只显示一个原始但但我不知道该怎么做。

我用php循环做了但是我在寻找是否有可能在mysql查询中这样才会真棒。

2 个答案:

答案 0 :(得分:1)

内部联接和分组

select table1.GPN, min(table2.Amt) 
from table1 
inner join table2 on table1.GPN= table2.GPN
where date(table2.date )  = str_to_date('2016-09-10', '%Y-%m-%d') 
group by table1.GPN

答案 1 :(得分:0)

这是一个经典的aggregate function查询。

SELECT T1.GPN, MIN(Amt) FROM Table1 T1 INNER JOIN Table2 T2 ON T1.GPN = T2.GPN GROUP BY T1.GPN WHERE T2.Date = ?