2015-04-07 165 views
0

我们拥有以下SQL。按产品ID和数量分组。限制6.查询和下面的示例输出。SQL,按列数选择最大列数

现在,假设我希望Group by product_id and count. Limit 6.基于表012中的最后1000条记录?所以不是整个表格,而是基于最后1000条记录的组数/计数。这可以做到吗?

我已经使用LIMIT来捕获顶部6.但是有没有办法限制计数的列的数量?分组到MAX?

希望这是明确的

THX,肖恩

SELECT `t`.`product_id` AS `id`, COUNT(*) AS `cnt` 
FROM `sofreport_viewed_product_index` AS `t` WHERE (t.product_id != '24') 
AND (t.store_id = '1') GROUP BY `t`.`product_id` ORDER BY `cnt` DESC LIMIT 6 

id cnt 
9 239 
440 179 
216 169 
10 157 
494 126 
500 118 
+1

你有一个标识列? I.e,HAVING id_col> max(id_col) - 1000 – nshah

+0

如果你真的只谈论一千行,为什么不为一千行做一个子查询呢?或者对于这个问题,你甚至可能会很懒,创建一个视图,它只是基表的select * ORDER BY insert_date DESC LIMIT 1000'。我对标题中的“最多列数”感到困惑,因为您似乎在询问最大行数,除非我误解了您。 –

+0

如何定义“最近的1000条记录”?你的意思是最后添加的1000条记录 - 如果是这样,你是否有一个字段来标识该行何时添加?或者你的意思是最高的1000个计数?答案真的取决于你对“最后1000条记录”的定义。 – Russ

回答

0

我认为它会像那个,

SELECT `t`.`product_id` AS `id`, COUNT(*) AS `cnt` FROM 
`sofreport_viewed_product_index` AS `t` WHERE (t.product_id != '24') 
AND (t.store_id = '1') and t.product_id in 
(SELECT id FROM sofreport_viewed_product_index ORDER BY ‘cnt‘ LIMIT 1000) 
GROUP BY `t`.`product_id` ORDER BY `cnt` DESC LIMIT 6