The answer on SO for MySQL is this*:

SELECT   ROUND(UNIX_TIMESTAMP(ts)/(15 * 60)) AS timekey
FROM     table
GROUP BY timekey;
The nearest equivalent in Calcite is this:

SELECT   cast(("hire_date" - timestamp '1970-01-01 00:00:00') minute as 
integer) / 15 AS timekey
FROM     table
GROUP BY cast(("hire_date" - timestamp '1970-01-01 00:00:00') minute as 
integer) / 15;

But doing date arithmetic in queries is an anti-pattern in ROLAP systems such 
as Kylin. A time dimension table is the preferred solution. I suggest that you 
add minute to your time dimension table (values 0 .. 59). You could also 
consider adding a quarter_hour column (values 0 .. 3). Then to find events in 
the same 15 minute interval you could group by date_id, hour, quarter_hour.

Julian

* I renamed the column from “timestamp” to “ts” because TIMESTAMP is a reserved 
keyword.

On Apr 27, 2015, at 6:13 AM, Ethan Wang <[email protected]> wrote:

> Looks like to me based on the stuff calcite has, you may create a calendar 
> table first:
> 
> tbl_calendar
> id  min   max 
> 1    0        15
> 2   16        30
> 3   31        45
> 4   46        60
> 
> 
> select * from 
> main,
> tbl_calendar
> where
> main.timestamp >= tbl_calendar.min
> and  main.timestamp <  tbl_calendar.max
> group by
> tbl_calendar.id
> 
> 
> 
> 
> 
>> On Apr 27, 2015, at 5:19 AM, Li Yang <[email protected]> wrote:
>> 
>> Hi
>> 
>> Given a timestamp column, I want to group by every 15 minutes like [1].
>> How can this be best done with calcite?
>> 
>> Looked at the reference, but answer is not obvious.
>> 
>> 
>> Thanks
>> Yang
>> 
>> 
>> [1]
>> http://stackoverflow.com/questions/2793994/group-mysql-query-by-15-min-intervals
>> [2] https://github.com/apache/incubator-calcite/blob/master/doc/REFERENCE.md
> 

Reply via email to