返回具有联接数据的MAX选择的记录

时间:2019-01-08 16:59:07

标签: mysql

我有下表,我试图从有生产的最新时期中选择小麦的数量。我需要返回金额以及Period_ID的名称。

我有一个查找表,可以很容易地将Period_ID与正确的时间顺序相关联。 (表格周期)

Table: Periods
Period_ID   |   Period_Order
-----------------------------
18JANP      |   51
18FEBP      |   52     
18MARP      |   53
18APRP      |   54
18MAYP      |   55


Table: Production
Farm_ID     |    Amount      |    Period_ID
--------------------------------------------
11-230      |    1500        |    18JANP
11-230      |    0           |    18FEBP
11-230      |    300         |    18MARP
11-230      |    600         |    18APRP
11-232      |    400         |    18JANP
11-232      |    900         |    18FEBP
11-232      |    300         |    18MARP
11-232      |    0           |    18APRP
11-232      |    100         |    18MAYP

这是我当前正在尝试的查询:

SELECT Farm_ID, 
       MAX(Periods.Period_Order),
       Amount
FROM Production
INNER JOIN Periods ON Production.Period_ID = Periods.Period_ID
WHERE Amount > 0
GROUP BY Farm_ID

在上面的确切示例中,我知道Amount> 0件确实是不必要的,但是在某些情况下,最后一个期间未返回任何金额,因此我必须能够进一步回顾。

我希望它会返回:

Farm_ID: 11-230
Amount: 600
Period_ID: 18APRP
Period_Order: 54

AND

Farm_ID: 11-232
Amount:100
Period_ID:18MAYP
Period_Order: 55

但是我得到的是正确的Amount和Period_Order,但是不正确的Period_ID: 看起来像这样(为简便起见,只记录一个):

 Farm_ID: 11-230
 Amount: 600
 Period_ID: 18JANP
 Period_Order: 54

这好像联接部分起作用,但是我不明白为什么我没有从联接表中获取正确的关系数据。

1 个答案:

答案 0 :(得分:0)

您可以使用子查询获取最长期限

(不包含farm_id的原始问题)

memset()

使用农场_id修改的问题

  select a.Period_ID, a.amount, b.Period_Order 
  from Periods a 
  inner join Production b on a.Period_ID = b.Period_ID
  inner join  (
    select  MAX(Periods.Period_Order) max_per
    FROM Periods a 
    INNER JOIN Production b on a.Period_ID = b.Period_ID
    WHERE b.Amount > 0
  ) t on t.max_per = a.order