"Jay Paulson \(CE CEN\)" <[EMAIL PROTECTED]> wrote on 12/28/2005 
02:37:36 PM:

> My query below returns however many rows fit the WHERE condition, in
> this case when they year, period, week is <= 2009131.  In my case it
> is returning 11 rows because I have 11 rows where the year,period, 
> week is 2006XXX.  However, this is not what I want.  I only need 4 
> rows returned to me and not all 11 no matter what the <= XXXXXXX 
> part of the where is.
> 
> I guess my question becomes is it possible to put a LIMIT of how 
> many rows are returned on a GROUP BY?
> 
> Thanks!
> 
> SELECT ROUND(AVG(page_hit)) as page_hit, 
> ROUND(AVG(training_tracking)) as training_tracking, 
> ROUND(AVG(certificates)) as certificates, ROUND(AVG(team_members)) 
> as team_members, ROUND(AVG(evaluation)) as evaluation, CONCAT(year,
> period,week) as date 
> 
> FROM statistics 
> 
> WHERE CONCAT(year,period,week) <= 2009131 AND region_id != 'AA' 
> 
> GROUP BY date 
> 
> ORDER BY date DESC LIMIT 0,77


The only way I have been able to do groupwise limits has been to save the 
grouped query into an intermediate table setup with a multi-column PK and 
an auto_increment column. That way I can serialize each member of each 
group. Then all I need to do is to select from my intermediate table where 
serno<5 and I have my 4 per group. If you want to be fancy, the 
intermediate table can also be a temporary table so that one user session 
doesn't clobber another's report.

I don't think there is any way with plain-old SQL (extended or otherwise) 
to do it in a single statement (unless you are doing it iteratively - that 
is: in a stored procedure and row-by-row).

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine

Reply via email to