The question I need to answer is this “What is the maximum number of page requests we have ever received in a 60 minute period?”
I have a table that looks similar to this:
date_page_requested date;
page varchar(80);
I’m looking for the MAX count of rows in any 60 minute timeslice.
I thought analytic functions might get me there but so far I’m drawing a blank.
I would love a pointer in the right direction.
You have some options in the answer that will work, here is one that uses Oracle’s “Windowing Functions with Logical Offset” feature instead of joins or correlated subqueries.
First the test table:
T now contains a row every quarter hour for a day with one additional row at 11:11:11 AM. The query preceeds in three steps. Step 1 is to, for every row, get the number of rows that come within the next hour after the time of the row:
Then assign the ordering by hour_count:
And finally select the earliest row that has the greatest number of following rows.
If multiple 60 minute windows tie in hour count, the above will only give you the first window.