我有一个包含id、价格、类别等信息的产品表格。我想从每个类别中提取1个最近的产品(即在其自身类别中具有最高ID)。
这是代码,它可以从6个类别获取6个产品,但它们都是最老的(具有最小ID)。
SELECT * from items WHERE item_category = '2' or item_category = '4' or
item_category = '12' or item_category = '13' or item_category = '14' or
item_category = '19' GROUP BY `item_category` ORDER BY `item_id` LIMIT 6
按ID排序是在返回的6个项目数组上执行的,而不是在原始表上执行。
我如何提取最新的项目呢?
我认为最好的查询方式是什么?
select *
from items
where item_category in ("2","4","12","13","14","19")
group by item_category
order by item_category DESC
GROUP BY
? - Artem IlchenkoSELECT item_category, MAX(item_Id) ... GROUP BY item_category
这样的语句。但是我很惊讶 MySQL 没有在你尝试按照所选列中的单个列进行分组时抛出错误,而是允许你强制仅按非聚合列分组。实际上,这样做是不被允许的。 - apokryfosSELECT * FROM items WHERE id IN (SELECT MAX(item_id) /* 你原来的查询语句 */)。
- apokryfosSELECT item_category, MAX(item_id) AS max_id, * FROM items WHERE item_category IN ("2","4","12","13","14","19") GROUP BY item_category ORDER BY max_id
- Denislav Karagiozov