2015-10-06 2 views
-1

Я должен вычислить десять самых посещаемых сайтов в течение каждого интервала 5 мин с 00:00:00 Приведенное ниже мои данные:топ десять минут через десять - улей запрос

time  site 
00:00:00 google.com 
00:01:06 yahoo.com 
00:03:06 youtube.com 
00:05:09 google.com 
00:11:07 amazon.com 
00:14:05 yahoo.com 
00:21:00 google.com 
00:30:56 amazon.com 

Я смущен, чтобы использовать множественные запросы как часть одного запроса куста.

Пожалуйста, помогите.

ответ

0

Запрос:

select interv, col2, count(col2) 
from (
    select floor((unix_timestamp(col1)-unix_timestamp(to_date(col1),'yyyy-MM-dd'))/600)*600 as interv, col1, col2 
    from default.test_time_group) t 
group by interv,col2; 

Пример схемы:

{time TIMESTAMP, site STRING} 

Пример:

2015-10-07 00:00:00 google.com 
2015-10-07 00:01:06 yahoo.com 

Результат:

interval col2   count 

0   google.com 2 
0   yahoo.com 1 
0   youtube.com 1 
600  amazon.com 1 
600  yahoo.com 1 
1200  google.com 1 
1800  amazon.com 1 

Объяснение: Я вычитали Отметка времени Unix даты колонки от Отметка времени Unix даты (без метки времени), чтобы проверить интервал. Чтобы получить все 10-минутные транзакции за тот же интервал, который я разделил на 600, взял floor() и умножился на 600. Затем я сгруппировал интервал и col2, чтобы получить результаты.

Примечание. Вы можете настроить сортировку в соответствии с вашими потребностями.