我有下表,我正在尝试选择最新生产时期的小麦数量。我需要返回金额和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
我知道在上面的确切示例中,0 件的>金额确实没有必要,但是可能存在最后一个周期没有返回任何金额的情况,所以我必须能够进一步回顾。
我希望它返回:
Farm_ID: 11-230
Amount: 600
Period_ID: 18APRP
Period_Order: 54
和
Farm_ID: 11-232
Amount:100
Period_ID:18MAYP
Period_Order: 55
但我得到的是正确的金额和Period_Order,但Period_ID不正确:它看起来像这样(为简洁起见,只有一条记录):
Farm_ID: 11-230
Amount: 600
Period_ID: 18JANP
Period_Order: 54
就像连接部分工作一样,但我不明白为什么我没有从连接表中获取正确的关系数据。
您可以使用子查询来获取最大周期
(没有farm_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
修改了农场_id的问题
select a.Period_ID, a.amount, b.Period_Order , b.farm_id
from Periods a
inner join Production b on a.Period_ID = b.Period_ID
inner join (
select MAX(Periods.Period_Order) max_per, b.farm_id
FROM Periods a
INNER JOIN Production b on a.Period_ID = b.Period_ID
WHERE b.Amount > 0
group by farm_id
) t on t.max_per = a.order and t.farm_id = b.farm_id