1

GROUP BY と ORDER BY を連携させるためにいくつかのオプションを試しましたが、正しい結果が得られません。

feeding_types table
    id                          
    type                            
    quantity                                            
    feeding_id

feedings table
    id                                                      
    data_entry_id

クエリの基本部分は次を返します。

        id      type        feeding_id
        15236   dried_comm  13499
        15237   dried_comm  13500
        15286   dried_comm  13543
        15287   dried_comm  13544
        15294   tinned_comm 13550
        15295   dried_comm  13551
        15296   dried_comm  13552

私がやりたいことは、GROUP BY を使用して、これらの結果から最新の dry_comm および tinned_comm レコードを取得し、残りを除外することです。

私はこれを試しました:

SELECT ft . * , MAX( ft.id ) ID
FROM feeding_types ft
INNER JOIN feeding_types ft2 ON ft2.id = ft.ID
JOIN feedings f1 ON ft.feeding_id = f1.id
WHERE f1.data_entry_id = 15758
GROUP BY ft.type
ORDER BY ID DESC

その結果:

id      type       feeding_id   ID 
15236   dried_comm  13499   15296
15294   tinned_comm 13550   15294

編集: 期待される結果は id type feed_id ID 15296 dry_comm 13552 15296 15294 tinned_comm 13550 15294 になります

これを正しく機能させる方法はありますか?

4

1 に答える 1

3

基礎となるロジックは、実際のアルゴリズムとうまく一致しません。代わりに次のことを提案させてください。

SELECT ft.*
FROM feeding_types ft
    JOIN (
        SELECT type, MAX(id) AS id 
        FROM feeding_types 
        GROUP BY type
    ) t ON t.type = ft.type AND t.id = ft.id
    JOIN feedings f1 ON ft.feeding_id = f1.id AND f1.data_entry_id = 15758
于 2013-05-09T13:58:16.623 に答える