通过交叉表查询按desc和group排序

时间:2013-05-09 13:51:23

标签: mysql

我已经尝试了一些我见过的让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从这些结果中获取最新的dried_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类型feeding_id ID     15296 dried_comm 13552 15296     15294 tinned_comm 13550 15294

任何想法如何正常工作?

1 个答案:

答案 0 :(得分: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