日期:2014-05-16  浏览次数:20953 次

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上建立复合索引