2016-05-01 4 views
0

Я запрашиваю набор данных из ~ 15 миллионов записей в SQL.Сложная группировка в SQL

Я сгруппировал и отсортировал данные так, чтобы это выглядело.

TruckID RoadID Date Time I want this 
Truck1 200 22-Jan-15 9:33:01 AM 1 
Truck1 200 22-Jan-15 9:34:18 AM 1 
Truck1 200 22-Jan-15 11:10:56 AM 2 
Truck1 200 22-Jan-15 11:11:30 AM 2 
Truck12 150 22-Jan-15 5:41:45 PM 1 
Truck12 150 22-Jan-15 5:41:55 PM 1 
Truck12 150 22-Jan-15 11:03:01 PM 2 
Truck12 150 22-Jan-15 11:03:41 PM 2 
Truck12 150 22-Jan-15 11:45:37 PM 3 
Truck16 330 22-Jan-15 2:18:22 AM 1 
Truck16 330 22-Jan-15 2:35:25 AM 2 
Truck16 330 22-Jan-15 2:35:50 AM 2 
Truck2 500 22-Jan-15 10:00:12 AM 1 
Truck2 500 22-Jan-15 10:00:22 AM 1 
Truck2 500 22-Jan-15 10:35:55 AM 2 
Truck7 10 22-Jan-15 7:15:08 AM 1 
Truck7 10 22-Jan-15 7:15:45 AM 1 
Truck7 10 22-Jan-15 11:10:56 AM 2 
Truck8 20 22-Jan-15 1:15:07 PM 1 
Truck8 20 22-Jan-15 1:16:07 PM 1 
Truck8 20 22-Jan-15 1:55:10 PM 2 
Truck8 20 22-Jan-15 1:55:10 PM 2 

Я хочу знать, если есть способ в SQL для создания значения в I want this поле. Логика заключается в том, что если в поле для одного и того же идентификатора TruckID на одном и том же идентификаторе дороги имеется более чем двухминутный (120 секунд) промежуток времени (120 секунд), в поледолжно быть создано новое значение, увеличиваемое на 1, для этого идентификатора TruckID -RoadID-группировка. Спасибо.

+2

Какая СУБД вы используете? –

+0

@a_horse_with_no_name Эти данные на самом деле сидят в Spark RDD. Я хочу использовать контекст SQL Spark специально. – dstar

+0

Может быть проще или эффективнее использовать 'collect_list', а затем' explode' - делать что-то вроде 'groupBy ($" TruckID ", $" RoadID "). Agg (collect_list (struct" $ Date "как" Date ", $" Время "как" Время ")) как" datetimes "). Explode ($" datetimes ") {...}', а затем выполните свою логику в '...'. –

ответ

0

Что вы пробовали? Может быть, вы пробовали ROW_NUMBER, хотя это не совсем понимаю, что вы хотите, но это близко:

ROW_NUMBER() OVER (PARTITION BY TruckID, RoadID ORDER By DateTime) as TruckRoadID 

Я думаю, вам нужно создать common table expresion, чтобы присоединиться к таблице с собой к следующей записи на основе грузовика и дороги , а затем используйте ROW_NUMBER() для этой общей таблицы expresion.

+0

Да, сейчас моя команда и я используем функцию задержки. Он отлично работает в Spark, если мы сокращаем набор данных, но не удается, когда мы пытаемся запустить его во всем. Мы увеличили память. Работа выполняется дольше, но все еще не выполняется. Я думаю, что отставание слишком интенсивно для памяти. – dstar

+2

Можете ли вы опубликовать свою логику запаздывания? Было бы большой помощью, если бы вы опубликовали код, который вы уже пробовали. –

Смежные вопросы