2017-06-15 14 views
0

私は2列のGROUP BYを使ってテーブルのすべての結果を取得し、最後の挿入を取得しようとしています。MYSQL - GROUP BY GROL BY BY COLUMN ORDER BY CREATION DATE

"価格" 表:

enter image description here

私の要求:私のDBで作成された最後ではないので、

SELECT DISTINCT p.* 
FROM prices p 
JOIN (
SELECT MAX(created_at) as "last_created" 
FROM prices 
WHERE station_id = 27210003 
GROUP BY station_id, fuel_id) as sub 
ON sub.last_created = p.created_at 
WHERE p.station_id = 27210003 
GROUP BY p.station_id, p.fuel_id 

結果は3行が、間違ったラインです-_-」

enter image description here

私を助けてください! > _ <「

Thxを

答えて

2

あなたはWHERE句内の特定のstation_idを選択しているので、あなたがGROUP BYにそれを含める必要はありません。

サブクエリは、グループ化している列を返す必要があります。したがって、サブクエリをON句に含める必要があります。

JOINが(同じfuel_idstation_idためcreated_at重複がある場合を除き)各fuel_idされるのは1行のみがあることを確認する必要がありますので、あなたは、外側のクエリでGROUP BYは必要ありません。

SELECT DISTINCT p.* 
FROM prices p 
JOIN (
    SELECT fuel_id, MAX(created_at) as "last_created" 
    FROM prices 
    WHERE station_id = 27210003 
    GROUP BY fuel_id) as sub 
ON sub.last_created = p.created_at AND sub.fuel_id = p.fuel_id 
WHERE p.station_id = 27210003 
+0

複数の可能性があるとは思われませんが、そこに行きます。 – Strawberry

+0

'GROUP BY fuel_id'以上のものを使用する必要がある場合は、' MAX'または 'MIN'に別の列を指定して、必要なものを選択する必要があります。 – Barmar