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 类型 feed_id ID 15296 dry_comm 13552 15296 15294 tinned_comm 13550 15294

任何想法如何让它正常工作?

4

1 回答 1

3

The underlying logic does not match very well your actual algorithm. Let me suggest the following instead:

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 回答