我有下表,我试图从有生产的最新时期中选择小麦的数量。我需要返回金额以及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
这好像联接部分起作用,但是我不明白为什么我没有从联接表中获取正确的关系数据。
答案 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