group前需取得倒序数据,有什么好方法吗?
一个产品表,有多个商家。每个商家有N个产品。
要求让每个商家只能显示一个最新产品,直接group by 商家id后,结果集默认是商家的一条最早的产品。
SELECT * FROM tbl WHERE status=1 GROUP BY bizid ORDER BY level DESC;
搜索了下,找到了以下二个方法,但觉得效率都不高(原应用的sql条件太多),想请教下除此外不知还有没有更好的办法?
1、SELECT * FROM(SELECT * FROM tbl ORDER BY id DESC) tem_tpl GROUP BY bizid;
2、SELECT * FROM tbl WHERE id IN(SELECT MAX(id) FROM tbl GROUP BY bizid);
------解决方案--------------------参考下贴中的多种方法
http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集,及散分....
------解决方案--------------------
SELECT * FROM products a WHERE NOT EXISTS(SELECT 1 FROM products WHERE a.`biz_id`=`biz_id` AND a.`id`<id)
在biz_id、ID上建立复合索引