我不是很喜歡數據庫,我發現一些問題試圖修改在MySql上定義的查詢。如何使用SQL在此特定情況下只檢索與日期字段的最後一個值相關的記錄?
我有這個疑問這是我的出發Poing的(有需要修改的查詢):
SELECT
MC_PS.id AS price_series_id,
MC_PS.market_commodity_details_id AS market_commodity_details_id,
MC_PS.price_date AS price_date,
MC_PS.avg_price AS avg_price,
CU.ISO_4217_cod AS currency,
MU.unit_name AS measure_unit,
MD_CD.market_details_id AS market_id,
MD_CD.commodity_details_id AS commodity_id
FROM Market_Commodity_Price_Series AS MC_PS
INNER JOIN MeasureUnit AS MU
ON MC_PS.measure_unit_id = MU.id
INNER JOIN Currency AS CU
ON MC_PS.currency_id = CU.id
INNER JOIN MarketDetails_CommodityDetails AS MD_CD
ON MC_PS.market_commodity_details_id = MD_CD.id
該查詢返回在某些市場上一些商品的價格,這是查詢輸出:
price_series_id market_commodity_details_id price_date avg_price currency measure_unit market_id commodity_id
-----------------------------------------------------------------------------------------------------------------------------------------------------
17 25 18/12/2017 778 RWF kilogram 4 6
70 32 17/12/2017 5 RWF kilogram 6 16
71 32 18/12/2017 6 RWF kilogram 6 16
3 26 15/12/2017 12,84 XOF kilogram 4 8
4 25 15/12/2017 18,233 XOF kilogram 4 6
5 25 16/12/2017 22,84 XOF kilogram 4 6
6 24 16/12/2017 18,94 XOF kilogram 4 4
7 24 17/12/2017 28,63 XOF kilogram 4 4
9 26 18/12/2017 48,37 XOF kilogram 4 8
11 24 18/12/2017 33,33 XOF kilogram 4 4
18 28 18/12/2017 13,7 XOF kilogram 5 4
19 28 17/12/2017 16,2 XOF kilogram 5 4
20 28 16/12/2017 14,9 XOF kilogram 5 4
21 30 18/12/2017 21,47 XOF kilogram 5 3
22 30 16/12/2017 22,39 XOF kilogram 5 3
23 30 17/12/2017 23,17 XOF kilogram 5 3
24 26 17/12/2017 16,22 XOF kilogram 4 8
26 26 16/12/2017 19,39 XOF kilogram 4 8
27 31 18/12/2017 13,2 XOF kilogram 5 8
28 31 17/12/2017 14,4 XOF kilogram 5 8
29 31 16/12/2017 12,6 XOF kilogram 5 8
31 25 17/12/2017 17,8 XOF kilogram 4 6
32 25 17/12/2017 14,8 XOF kilogram 4 6
33 29 18/12/2017 8,2 XOF kilogram 5 1
34 29 17/12/2017 9,6 XOF kilogram 5 1
35 29 16/12/2017 9,3 XOF kilogram 5 1
正如你可以看到它包含了商品(commodity_id)出售到某一天市場(market_id)的價格(price_date)。
我需要修改我的查詢,只顯示在市場上出售的商品的最後價格。
實際上,如果在前面的結果中有多個記錄與特定市場上銷售的特定商品有關的不同日期有關,則必須在最後日期返回單個記錄。
所以我修改查詢的輸出必須是這樣的一個:
price_series_id market_commodity_details_id price_date avg_price currency measure_unit market_id commodity_id
-----------------------------------------------------------------------------------------------------------------------------------------------------
71 32 18/12/2017 6 RWF kilogram 6 16
9 26 18/12/2017 48,37 XOF kilogram 4 8
11 24 18/12/2017 33,33 XOF kilogram 4 4
18 28 18/12/2017 13,7 XOF kilogram 5 4
21 30 18/12/2017 21,47 XOF kilogram 5 3
27 31 18/12/2017 13,2 XOF kilogram 5 8
17 25 18/12/2017 778 RWF kilogram 4 6
33 29 18/12/2017 8,2 XOF kilogram 5 1
正如你可以看到每個market_id和commodity_id字段只檢索有關最後記錄price_date value
如何正確實施此更改?
也許我可以用GROUP BY用HAVING子句以某種方式?
我改變了我的downvote upvote。使用O Jones第二個解決方案。第一個是不是一個好主意 – ojf
第二個解決方案對我來說聽起來不錯;-) – AndreaNobili
如果前提條件成立(自動增量ID,沒有更新,只有INSERT和每個插入使用當前日期,我的第一個解決方案是正確的,並執行非常儘管如此,還是有相反的意見。它也正確地消除了重複的最新日期值,如果有多個。 –