2015-08-11 1 views
0

Я использую SQL-запрос Amazon Redshift SQL, я пытаюсь сортировать записи по 3 столбцам: timestamp, cookieID, trackingpointID, но когда разница во времени между двумя записями, предписываемых этим 3 колонки составляет менее 30 минут (с тем же cookieID и TrackingPoint), я хочу, чтобы пропустить этот учет и оставить только самые высокие, например, если у меня будет:Ранжирование записей в соответствии с меткой времени, но опускание записей, где разница во времени составляет менее 30 минут

timestamp cookie track 
9:04:29  A  10420641 
9:04:32  A  10420641 
9:04:36  A  10420641 
9:04:32  A  10420641 
10:30:00 A  10420641 
10:31:21 A  10420641 
9:07:01  A  10881111 
9:07:34  A  10881111 
9:07:45  A  10881111 
9:04:39  A  4326086 

и Я хотел бы иметь следующий результат:

timestamp cookie track  row 
9:04:36  A  10420641 1 
10:31:21 A  10420641 2 
9:07:45  A  10881111 1 
9:04:39  A  4326086  1 
+2

Что делать, если у вас есть десять записей, все они разделены на 25 минут? –

+0

Если вы поместите '...' после своей последней строки в результате, становится намного более очевидным то, что вы хотите, теперь кажется, что вам просто нужны эти 4 строки. – maraca

ответ

0

Похоже, вы хотите упорядочить свои данные. Вы можете сделать это с помощью lag() и совокупных сумм. Что-то вроде этого:

select min(timestamp), cookie, track, sessionid 
from (select r.*, sum(IsSessionStart) over (partition by cookie, track order by timestamp) as sessionid 
     from (select r.*, 
        (case when datediff(min, 
             lag(timestamp) over (partition by cookie, track order by timestamp), 
             timestamp) > 30 
         then 1 else 0 end) as IsSessionStart 
      from records r 
      ) r 
    ) r 
group by cookie, track, sessionId; 
Смежные вопросы