我已经尝试了一些我见过的让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
任何想法如何正常工作?
答案 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