List:General Discussion« Previous MessageNext Message »
From:Baron Schwartz Date:October 30 2007 9:08pm
Subject:Re: Group by time range.
View as plain text  
Hi,

Chris W wrote:
> I have the following query...
> SELECT CreateDate, count( * )
> FROM `userprofile`
> GROUP BY CreateDate
> 
> 
> It isn't exactly what I want.  Records are added to this table in 2 main
> ways.  First people use the web site interface to create records.  In
> this case, records are only added by one or 2 people and with a
> significant time between record inserts.  The second way is through an
> import that reads data from a text file.  In the second case the date on
> the records will all be close together with about 60 records added per
> second.  What I want to do is find all the groups where the inserts all
> happened with in say 10 seconds.   So my group by would be more like......
> 
> GROUP BY CreateDate +- 10 SECOND

Convert the date to a number of seconds, then round to the nearest 20 
seconds and convert it back to a date.  You can use FROM_UNIXTIME() and 
UNIX_TIMESTAMP() for the conversion.  You can round to the nearest 20 
seconds by dividing by 20, rounding to the nearest whole number, and 
multiplying by 20 again.  Group by the resulting expression.

Baron
Thread
Group by time range.Chris W30 Oct
  • Re: Group by time range.Baron Schwartz30 Oct
  • Re: Group by time range.Peter Brawley30 Oct